【问题标题】:Regular Expression for Password Validation Objective-C [duplicate]密码验证Objective-C的正则表达式[重复]
【发布时间】:2014-12-12 22:38:06
【问题描述】:

谁能帮我,我需要一个正则表达式密码验证。

条件:密码最多8个数字或字母,至少1个特殊字符

提前致谢。

【问题讨论】:

  • 你想允许>吗?你尝试了什么?
  • 简单使用字符范围长度,使用 NSScanner 进行字符串搜索,哪些类型的字符存在与否。
  • 是的。我们允许的任何特殊字符。
  • 我的意思只是一个特殊字符。 maximum of 8 characters 也包括 0。
  • 最多8个字符,至少一个特殊字符,包括0个

标签: ios objective-c regex cocoa-touch


【解决方案1】:
^(?=.{2,8}$)(?=.*?[A-Za-z0-9])(?=.*?[\W_])[\w\W]+

此正则表达式允许 2 到 8 个字符的密码。它要求至少有 1 个字母数字(字母/数字)字符和 1 个非字母数字字符。你可以测试一下here

如果您想更改所需的最少字符或更高的最大值。只需更改 2 或 8。

【讨论】:

  • 收到警告:未知转义序列 '\W'
  • @DhavalBhimani 我得到了同样的警告。你找到解决办法了吗?
【解决方案2】:

解决方案:

-(BOOL)isValidPassword:(NSString *)checkString{
NSString *stricterFilterString = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$#!%*?&])[A-Za-z\\d$@$#!%*?&]{8,}";
NSPredicate *passwordTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", stricterFilterString];
return [passwordTest evaluateWithObject:checkString];
}

测试:

 NSLog(@"%@", [self isValidPassword:@"D33p@k$235#@df"] ? @"YES" : @"NO");

输出:

YES

【讨论】:

    【解决方案3】:

    斯威夫特 3

    检查密码长度是否大于等于 8 且为小写, 大写,十进制数字和特殊字符,如 !@#$%^&*()_-+ 是 可选。

    为什么我不用正则表达式?

    因为在常规中很难支持保留字符 表达式语法。


    func isValidated(_ password: String) -> Bool {
        var lowerCaseLetter: Bool = false
        var upperCaseLetter: Bool = false
        var digit: Bool = false
        var specialCharacter: Bool = false
    
        if password.characters.count  >= 8 {
            for char in password.unicodeScalars {
                if !lowerCaseLetter {
                    lowerCaseLetter = CharacterSet.lowercaseLetters.contains(char)
                }
                if !upperCaseLetter {
                    upperCaseLetter = CharacterSet.uppercaseLetters.contains(char)
                }
                if !digit {
                    digit = CharacterSet.decimalDigits.contains(char)
                }
                if !specialCharacter {
                    specialCharacter = CharacterSet.punctuationCharacters.contains(char)
                }
            }
            if specialCharacter || (digit && lowerCaseLetter && upperCaseLetter) {
                //do what u want
                return true
            }
            else {
                return false
            }
        }
        return false
    }
    let isVaildPass:Bool = isValidated("Test**00+-")
    print(isVaildPass)
    

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 1970-01-01
      • 2016-04-15
      • 2015-06-10
      • 2016-06-03
      • 2016-10-30
      • 2016-10-09
      • 1970-01-01
      相关资源
      最近更新 更多