在Objective-C中实时进行textField验证

时间:2013-08-28 00:18:24

标签: ios uitextfield format

我在xCode中有一个TextField,有人要我承认某些类型的字符给我这个文本字符串:

^([A-ZÑÑÁÉÍÓÚÀÈÌÒÙÄËÏÖÜ ])*$

或者这个:

^([0-9])*$

我知道一个使用名为textField shouldChangeCharactersInRange的UITextFieldDelegate的方法,这是我实现此方法的方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *allowedCharacters  = @"abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMÑNOPQRSTUVWXYZ0123456789.@-_ ";
    NSCharacterSet *characterSet    = [NSCharacterSet characterSetWithCharactersInString:allowedCharacters];


    if ([string stringByTrimmingCharactersInSet:characterSet].length == 0)textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
    return NO;

    return YES;


}

如果您看到,在我的编程中,我的变量 allowedCharacters 存储了我的所有有效字符,但格式不同(我必须编写所有允许的字符),

我想用我的伴侣的文字格式编写类似的东西^([0-9])* $(使用范围的文字)我该怎么做

提前致谢

1 个答案:

答案 0 :(得分:3)

你可以用这个:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    // Valida el patron que se introduce en el campo de texto
    if (![self validateString:string withPattern:@"^([A-Z0-9.@-_ ])*$"])    return NO;

    return YES;
}
withPattern 参数中的

插入你的正则表达式,然后在这里它是完成所有魔法的方法:

- (BOOL)validateString:(NSString *)string withPattern:(NSString *)pattern
{
    NSError *error              = nil;
    NSRegularExpression *regex  = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];

    NSAssert(regex, @"Unable to create regular expression");

    NSRange textRange   = NSMakeRange(0, string.length);
    NSRange matchRange  = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];

    BOOL didValidate    = NO;

    // Did we find a matching range
    if (matchRange.location != NSNotFound)  didValidate = YES;

    return didValidate;
}

测试并告诉我们它是如何进行的