密码验证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的正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章