2012-05-19 2 views
0

Этот вопрос задается так много раз на SO, но у меня проблема с выражением, и он не работает для меня.Регулярное выражение для номера телефона США не работает

Мне нужно разрешить только номера, (,), - в телефонном номере, и для этого у меня есть код следующим образом. Но работает только раскованное выражение, и только для чисел no (,), - разрешено, и я искал и получал другие выражения, которые должны разрешать (,), но они тоже не работают.

Что может быть неправильным? Пример: 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

Check this out - 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

Смежные вопросы