【问题标题】:Validating user input from a regEx验证来自正则表达式的用户输入
【发布时间】:2013-12-12 17:40:58
【问题描述】:

我必须通过以下 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}, case 0, canon 0))'

【问题讨论】:

标签: ios objective-c regex


【解决方案1】:

我也遇到了这个问题。 '+'确实是一个元字符,你应该明白为什么要使用'+'。

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

如果你把'+'当作特殊字符,想匹配另一个字符,那么你应该在'+'之前添加一个字符,这样就不会崩溃了。

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

【讨论】:

    【解决方案2】:

    像这样使用模式

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

    【讨论】:

      【解决方案3】:

      + 是一个特殊字符;您需要转义它(\+?)或正确使用它(例如,\s+? 用于前导空格)

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 1970-01-01
        • 2019-01-07
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 2018-02-16
        • 1970-01-01
        相关资源
        最近更新 更多