UITextField验证错误

时间:2016-07-07 06:34:51

标签: ios objective-c regex validation uitextfield

我正在尝试验证三个UITextField,并且没有一个文本字段接受超过11个字符。如果我输入第12个字符,我的文本字段变为红色,我无法进入下一个字段进行输入。

我从这个链接TextField Validation With Regular Expression获得了一些帮助,但是现在我似乎无法理解为什么我的所有文本字段都不接受超过11个字符?

- (BOOL)validateInputWithString:(NSString *)aString
{
    NSString* regularExpression = @""; 

    if (aString == self.ipAddress.text) {
        regularExpression = @"^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";        
    } else if (aString == self.username.text) {
         regularExpression = @"^[A-Za-z][A-Za-z0-9]*$";
    } else if (aString == self.password.text) {
         regularExpression = @"^[^\\s\\r\\n][0-9a-zA-Zk\\r\\n@!#\\$\\^%&*()+=\\-\\[\\]\\\\\\';,\\.\\/\\{\\<>\\?\\s]*$"; 
    }

    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: regularExpression
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    if (error) {
        NSLog(@"error %@", error);
    }

    NSUInteger numberOfMatches = [regex numberOfMatchesInString:aString
                                                        options:0
                                                          range:NSMakeRange(0, [aString length])];

    if([self.ipAddress.text length]>0 && [self.username.text length]>0 && [self.password.text length]>0)
    {
        enableLogin = YES;

    }
    return numberOfMatches > 0;
}

- (void)validateInputCallback:(NSNotification *) notification
{
    UITextField* atextField = (UITextField *)[notification object];

    if ([self validateInputWithString:atextField.text]){ 

        //Turns the textfield green
        atextField.layer.cornerRadius=8.0f;
        atextField.layer.masksToBounds=YES;
        atextField.layer.borderColor=[[UIColor greenColor]CGColor];
        atextField.layer.borderWidth= 1.0f;

        } else {
        //Turns the textfield red
                atextField.layer.cornerRadius=8.0f;
                atextField.layer.masksToBounds=YES;
                atextField.layer.borderColor=[[UIColor redColor]CGColor];
                atextField.layer.borderWidth= 1.0f;
    }    
}

1 个答案:

答案 0 :(得分:0)

你使用==来比较字符串的地方是错误的,因为你比较指针而不是字符串内容,并且会有字符串的副本,所以指针会有所不同。更改所有内容以使用isEqualToString:

你不应该根据你想要比较的文本来确定逻辑,你应该根据提供文本的文本字段选择正则表达式。