我的密码正则表达式是
- (NSString *) getRegularExpression:(NSString *)extraWords
{
/*
* ^$ Empty string
* | Or
* ^ Start of a string
* [] Explicit set of characters to match
* ^[:space:] Matches any non-white-space character - equivalent to \S
* {6,30} 6-20 characters
* $ End of a string
*/
return @"^$|^[^[:space:]]{6,20}$";
}
如何编写包含上述要求的确认密码正则表达式,它也等于我的密码字符串。任何人都可以帮助我吗?
答案 0 :(得分:1)
在你的shouldChangeCharactersInRange中你可以通过这个
来完成- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSString *expression = @"^$|^[^[:space:]]{6,20}$";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
options:NSRegularExpressionCaseInsensitive
error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
options:0
range:NSMakeRange(0, [newString length])];
if (numberOfMatches == 0)
return NO;
return YES;
}
答案 1 :(得分:1)
您可以使用NSPredicate
。
NSString *passwordRegex = @"^$|^[^[:space:]]{6,20}$";
NSPredicate *password = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", passwordRegex];
if([password evaluateWithObject:@"YOUR PASSWORD"){
//success
}
答案 2 :(得分:0)
如果您想查看您的正则表达式是否符合密码是否与原始密码匹配,您通常不会通过正则表达式执行后者。您应该使用NSString
方法isEqualToString
确认字符串相等。:
- (BOOL)validateString:(NSString *)input password:(NSString *)password
{
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^$|^[^[:space:]]{6,20}$" options:0 error:&error];
if ([regex numberOfMatchesInString:input options:0 range:NSMakeRange(0, [password length])] > 0 && [input isEqualToString:password]) {
return YES;
}
return NO;
}
话虽如此,我不建议同时检查正则表达式和字符串相等性。并且会出现以下两种情况之一:要么它们不一致(因为您要验证的密码本身没有通过正则表达式),要么它们是多余的(因为如果您要验证的密码满足正则表达式,那么你需要检查的是字符串是否相等)。
通常,我会对新密码进行一些验证,例如正则表达式,但在验证另一个密码时,我只会检查是否相等。
答案 3 :(得分:0)
表达式匹配那些约束和密码:
- (NSString *) getRegularExpression: (NSString *) extraWords
{
/*
* ^$ Empty string
* | Or
* ^ Start of a string
* [] Explicit set of characters to match
* ^[:space:] Matches any non-white-space character - equivalent to \S
* {6,30} 6-20 characters
* $ End of a string
* (?=...)(?=...) And Operators
*/
// eg: @"^$|(?=^[^[:space:]]{6,20}$)(?=^password$)"
return [NSString stringWithFormat:@"^$|(?=^[^[:space:]]{6,20}$)(?=^%@$)", extraWords];
}
extraWords用于接收密码字符串。