3

我在 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])*$(使用范围的文本)我该怎么做

提前致谢

4

1 回答 1

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;
}

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

于 2013-08-29T22:59:45.717 回答