密码validation的正则expression式Objective-C

任何人都可以请帮助我,我需要一个正则expression式密码validation。

条件:密码应该是最多8个字符数字或字母至less有一个特殊字符

提前致谢。

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

这个正则expression式允许2到8个字符的密码。 它要求至less有一个字母数字(字母/数字)字符和一个非字母数字字符。 你可以在这里testing它。

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

scheme:

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

testing:

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

输出:

 YES 

Swift 3

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

为什么我不使用正则expression式?

因为在正则expression式语法中很难支持保留字符。


 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)