确认密码的正则表达式

时间:2014-05-01 06:44:31

标签: ios objective-c regex nsregularexpression

我的密码正则表达式是

- (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}$";
}

如何编写包含上述要求的确认密码正则表达式,它也等于我的密码字符串。任何人都可以帮助我吗?

4 个答案:

答案 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用于接收密码字符串。