密码验证Objective-C的正则表达式[重复]

Posted

技术标签:

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

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

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

提前致谢。

【问题讨论】:

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

【讨论】:

以上是关于密码验证Objective-C的正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式密码验证 - Codewars [重复]

用于密码验证的正则表达式,仅特定字符 [重复]

如何在 Objective-C 中使用正则表达式验证 IP 地址?

正则表达式验证模式只允许一个字符[重复]

正则表达式验证

默认 ASP.NET Core 身份密码的正则表达式