암호를 확인하기 위해 Regex를 사용합니다. 그러나 의도 한대로 작동하지 않습니다. 일부 단위 테스트를 사용하여 정규식을 확인합니다.Objective-c의 정규식이 의도 한대로 작동하지 않습니다.
@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])(?=.*[-_,[email protected]#$%'\"]).{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([@"[email protected]" matchesRegex:REGEX_VALID_PASS], @"Password 2 failed");
STAssertTrue([@"Pw987321-_,[email protected]#$%'`" matchesRegex:REGEX_VALID_PASS], @"Password 3 failed");
//Returns TRUE ???
STAssertFalse([@"[email protected]" 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([@"[email protected]" matchesRegex:REGEX_VALID_PASS], @"Wrong password 9 works (< 6)");
비밀번호 '가 password1 @'와 '암호 2 번호는'TRUE 반환되지만 올바른가 없습니다.
오류 :
file://localhost/Users/user/app/AppTest.m: error: testRegex (AppTest) failed: "[@"[email protected]" 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)
문제 외에도 대괄호 '^ (? =. * \\ d) (? =. * [az]) (? =. * [AZ]) (? =. * [ {6,20} $'같은 것을 할 것입니다. – stema
서버 측에서 복사했습니다. 변경하기 전에 먼저 작동시키고 싶었습니다. Regex.하지만 고맙습니다. – Justin