如何为名称验证制作正则表达式

时间:2015-10-20 09:54:16

标签: ios objective-c iphone regex xcode

我想创建一个正则表达式,用户只能输入字母表。

我正在使用这段代码来验证UITextField

我正在验证shouldChangeCharactersInRange方法中的代码。

 NSString *regex = @"[a-zA-Z]";
NSPredicate *testRegex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

if(![testRegex evaluateWithObject:string])
    return NO;

工作正常但我无法使用BacKspace按钮删除由于RegEx我不允许这样做。

如何制作支持字母并允许删除的正则表达式。

2 个答案:

答案 0 :(得分:2)

试试这个:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)iRange replacementString:(NSString *)iText {
    NSString *newString = [iTextView.text stringByReplacingCharactersInRange:iRange withString:iText];
    NSString *abnRegex = @"[A-Za-z]+";
    NSPredicate *abnTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", abnRegex];
    return ([abnTest evaluateWithObject:newString] || newString.length == 0);
}

答案 1 :(得分:1)

你可以尝试这个(只是一个解决方法):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (range.length > 0)
    {
         // We're deleting
         return YES;
    }
    else
    {
        // We're adding
        NSString *regex = @"[a-zA-Z]";
        NSPredicate *testRegex = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

       if(![testRegex evaluateWithObject:string])
           return NO;
       else
           return YES;        
}