Objective-c中的正则表达式无法正常工作

Objective-c中的正则表达式无法正常工作,第1张

概述我使用 Regex来检查密码.但它没有按预期工作. 我使用一些单元测试来检查正则表达式. @implementation NSString (regexMatch)- (BOOL)matchesRegex:(NSString *)regexPattern{ NSError *error = nil; NSRegularExpression* regex = [NSRegul 我使用 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)andfile://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])也将匹配小写字母.

您的失败单元测试期望有不同的行为:它们都检查密码是否包含大写和小写字母,而输入包含相同大小写的字母.

总结

以上是内存溢出为你收集整理的Objective-c中的正则表达式无法正常工作全部内容,希望文章能够帮你解决Objective-c中的正则表达式无法正常工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1007361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存