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)