2013-11-27 142 views
2

我必须从以下regEx验证电话号码。验证来自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))'

+0

http://stackoverflow.com/questions/3349494/objective-c-regex-to-check-phone-number – Laxmi

+0

一个简单的..如果这可以帮助:http://www.iossnippet.com/snippets /验证/如何对验证-A-电话号码功能于目标c-IOS / – GenieWanted

回答

3

+是一个特殊字符;你需要转义(\+?)或正常(例如\s+?为前导空格)

0

使用该模式使用这样

[email protected]"(([+]{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}"; 
0

我太满足了这个问题。 '+'确实是一个元字符,你应该明白你为什么使用'+'。

如果你想匹配'+'像一个正常字符,然后你应该使用'\ +'。

如果您将'+'视为特殊字符,则需要匹配另一个字符。然后您应该在'+'之前添加该字符,然后它不会崩溃。

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