2012-05-19 85 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

相關問題