Objective-c中的正则表达式无法正常工作
发布时间:2020-12-14 17:30:38 所属栏目:百科 来源:网络整理
导读:我使用 Regex来检查密码.但它没有按预期工作. 我使用一些单元测试来检查正则表达式. @implementation NSString (regexMatch)- (BOOL)matchesRegex:(NSString *)regexPattern{ NSError *error = nil; NSRegularExpression* regex = [NSRegularExpression regu
我使用
Regex来检查密码.但它没有按预期工作.
我使用一些单元测试来检查正则表达式. @implementation NSString (regexMatch) - (BOOL)matchesRegex:(NSString *)regexPattern { NSError *error = nil; NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:regexPattern options:NSRegularExpressionSearch error:&error]; if(error) { NSLog(@"Error on maches regex: %@ on %@: %@",regex,self,error); return NO; } NSUInteger maches = [regex numberOfMatchesInString:self options:NSRegularExpressionSearch range:NSMakeRange(0,[self length])]; return (maches > 0); } @end 正则表达式: const static NSString *REGEX_VALID_PASS = @"(^((?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[-_,.@#$%'"]).{6,20})$)"; 单元测试: //Password // At least: // - between 6 and 20 chars // - a capital character // - a small character // - a digit // - a special char: - _,. @ # $% ′ ' STAssertTrue([@"Pass1-" matchesRegex:REGEX_VALID_PASS],@"Password 1 failed"); STAssertTrue([@"aPrettyLongPassw0rd@" matchesRegex:REGEX_VALID_PASS],@"Password 2 failed"); STAssertTrue([@"Pw987321-_,.@#$%'`" matchesRegex:REGEX_VALID_PASS],@"Password 3 failed"); //Returns TRUE ??? STAssertFalse([@"password1@" matchesRegex:REGEX_VALID_PASS],@"Wrong password 4 works (No capital letter)"); //Returns TRUE ??? STAssertFalse([@"PASSWORD2#" matchesRegex:REGEX_VALID_PASS],@"Wrong password 5 works (No small letter)"); STAssertFalse([@"Password8" matchesRegex:REGEX_VALID_PASS],@"Wrong password 6 works (No special letter)"); STAssertFalse([@"Password$" matchesRegex:REGEX_VALID_PASS],@"Wrong password 7 works (No digit letter)"); STAssertFalse([@"PrettyLongPasswordIsWrong123#" matchesRegex:REGEX_VALID_PASS],@"Wrong password 8 works (> 20)"); STAssertFalse([@"Pw@3" matchesRegex:REGEX_VALID_PASS],@"Wrong password 9 works (< 6)"); 密码’password1 @’和’PASSWORD2#’返回TRUE但不正确. 错误: file://localhost/Users/user/app/AppTest.m: error: testRegex (AppTest) failed: "[@"password1@" matchesRegex:REGEX_VALID_PASS]" should be false. Wrong password 4 works (No capital letter) and file://localhost/Users/user/app/AppTest.m: error: testRegex (AppTest) failed: "[@"PASSWORD2#" matchesRegex:REGEX_VALID_PASS]" should be false. Wrong password 5 works (No small letter) 解决方法
您指定了NSRegularExpressionCaseInsensitive选项,因此表达式不区分大写和小写字母是有意义的.
使用指定的NSRegularExpressionCaseInsensitive选项,(?=.* [a-z])将匹配任何字母,包括大写字母;类似地,(?=.* [A-Z])也将匹配小写字母. 您的失败单元测试期望有不同的行为:它们都检查密码是否包含大写和小写字母,而输入包含相同大小写的字母. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |