关于ios:密码验证的正则表达式Objective-C

Regular Expression for Password Validation Objective-C

本问题已经有最佳答案,请猛点这里访问。

有人能帮我吗?我需要一个正则表达式密码验证。

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

事先谢谢。


1
^(?=.{2,8}$)(?=.*?[A-Za-z0-9])(?=.*?[\W_])[\w\W]+

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

如果要更改所需的最小字符数或更高的最大字符数。只需更改2或8。


解决方案:

1
2
3
4
5
-(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];
}

测试:

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

输出:

1
YES


斯威夫特3

检查密码长度是否大于或等于8且有小写字母,大写、小数和特殊字符,如!@#$%^&;*()是可选的。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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)