验证来自regEx的用户输入

时间:2013-11-27 07:34:54

标签: ios objective-c regex

我必须通过以下注册表验证电话号码。

//**regExpPattern** : "+?[0-9]{0,3}( |-)?[0-9]{4}( |-)?[0-9]{3}( |-)?[0-9]{3}"
-(BOOL) textFieldValidation:(NSString *)checkString withRegEx:(NSString*)regExpPattern
{
      NSString *stringToValidate = [[NSString alloc]initWithString:checkString];
      NSString *pattern = [[NSString alloc]initWithString:regExpPattern]
      NSLog(@"%@ %@",checkString,regExpPattern);


      NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];

            if ([myTest evaluateWithObject:stringToValidate]){
                return YES;
            }
            return FALSE;
        }

我遇到以下异常:

'的 NSInvalidArgumentException ' '无法进行正则表达式匹配,原因:(无法打开模式U_REGEX_RULE_SYNTAX(字符串6789054321,模式+ [?] [0-9] {0,3}(| - )?[0-9] {4}( | - )?[0-9] {3}(| - )?[0-9] {3},案例0,佳能0))'

3 个答案:

答案 0 :(得分:3)

+是一个特殊角色;你需要逃避它(\+?)或正确使用它(例如\s+?作为前导空格)

答案 1 :(得分:0)

使用这样的模式

regExpPattern=@"(([+]{1}|[0]{2}){0,1}+[1]{1}){0,1}+[ ]{0,1}+(?:[-( ]{0,1}[0-9]{3}[-) ]{0,1}){0,1}+[ ]{0,1}+[0-9]{2,3}+[0-9- ]{4,8}";

答案 2 :(得分:0)

我也遇到了这个问题。 '+'确实是一个元字符,您应该理解为什么使用'+'。

如果你想像普通字符一样匹配'+',那么你应该使用'\ +'。

如果你把'+'视为特殊字符,想要匹配另一个字符。那么你应该在'+'之前添加字符,那么它就不会崩溃。

PS:在iOS谓词中,'like'和'matches'不符合相同的正则表达式匹配规则!