2012-05-19 84 views
0

这种类型的问题在SO上被问了很多次,但是我有表达的问题,而且它不适合我。美国电话号码不正常表达式的正则表达式

我需要只允许号码,(,), - 在电话号码,为此,我有代码如下。 但只有未注释的表达式正在工作,这是只有数字没有(,), - 是允许的,我搜查并得到其他表达式应该允许(,),但这些都不工作。

什么可能是错的? 例子:9876545678, (123) 123-7657

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 
     if ([string isEqualToString:@""]) { 
      return TRUE; 
     } 
     if(textField == aTfdPhone) 
     { 
      if ([string isEqualToString:@"."]) { 
        return NO; 
       } 
      NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

      NSString *expression = @"^([0-9]+)?(\\.([0-9])?)?$"; 
    //  NSString *expression = @"^[(]?[2-9][0-9]{2}[)]?[ -]?[0-9]{3}[ -]?[0-9]{4}$"; 
     //  NSString * const expression = @"^([+-]{1})([0-9]{3})$"; 
      NSError *error = nil; 

      NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression 
                 options:NSRegularExpressionCaseInsensitive 
                 error:&error]; 
      if (error) { 
       NSLog(@"error %@", error); 
      } 
      NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString 
                 options:0 
                range:NSMakeRange(0, [newString length])]; 
      if (numberOfMatches == 0){ 
        return NO; 
      } 
     } 
     return TRUE; 
    } 
+1

可能重复的[电话号码验证综合正则表达式](http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) –

+0

检查这 - - http://snipplr.com/view/7622/ – rishi

+0

你的任何尝试都不符合你的要求。第一个注释限制了允许的数量,并且具有非常具体和严格的分组要求,但是看起来接近于你所说的你想要的。但是,特别是如果正则表达式对你完全陌生,你应该考虑一种不同的方法。一个常见的建议是修剪所有的空格和标点符号,然后检查你是否只有数字和足够长的序列。 – tripleee

回答

1

你的第二次尝试中无法识别,因为第一个数字(123) 123-7657

应该

NSString *expression = @"^[(]?[1-9][0-9]{2}[)]?[ -]?[0-9]{3}[ -]?[0-9]{4}$"; 

NSString *expression = @"^[(]?[2-9][0-9]{2}[)]?[ -]?[0-9]{3}[ -]?[0-9]{4}$"; 

唯一的区别是操作员匹配第一位数字[2-9]将不匹配1.

+0

这个表达式不允许偶数 – Heena

相关问题