我在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])* $(使用范围的文字)我该怎么做
提前致谢
答案 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;
}
测试并告诉我们它是如何进行的