2012-01-25 4 views
2

Я хочу иметь только 13 числовые значения или значения 13numeric могут начинаться с префикса «+» sysmbol.so + не является обязательным Пример: 1234567891234 другой пример: +1234567891234Проверка номера телефонов

Telephone number format should be international,Is there any Regex for phone number validation in iPhone

Я пробовал указанную выше ссылку, но это +1234545, но я хочу иметь только 13 чисел или + с префиксами с 13 цифрами.

Пожалуйста, дайте мне знать, что я могу изменить его здесь

Это код, я попытался

NSString * forNumeric = @"^\\+(?:[0-9] ?){6,14}[0-9]$"; 

    BOOL isMatch = [[textFieldRounded text] isMatchedByRegex:forNumeric]; 

    if (isMatch == YES){ 

     NSLog(@"Matched"); 
    } 
    else { 
     NSLog(@"Not matched"); 
    } 
+0

Невозможно использовать регулярные выражения? pls дайте мне знать – user198725878

ответ

1

^(\+?)(\d{13})$ должен сделать трюк, избежать косых черт для объектива-C. 13 цифр, с опциями + префикс.

Если вы хотите играть с выражением regexp, вы можете использовать такие услуги, как this one для визуальной обратной связи, очень удобно.

NSString * forNumeric = @"^(\\+?)(\\d{13})$"; 
+1

В этом случае пользователю необходимо ввести 13-значное число. Что можно сделать, если мы хотим, чтобы пользователь вводил что-то меньшее, чем 13 номеров? Например, 9-10 цифр. – ScarletWitch

+3

'NSString * forNumeric = @"^(\\ +?) (\\ d {a, b}) $ ";' Просто замените a и b на требуемый диапазон, например. a = 9, b = 10. –

1
NSDataDetector *matchdetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber 
                   error:&error]; 
NSUInteger matchNumber = [matchdetector numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])]; 

Если вы используете UITextField тогда:

textField.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
+0

'dataDetectorTypes' не для текстовых полей. – Nishant

0

Ниже то, что я делаю для проверки номера мобильных телефонов в Великобритании:

- (BOOL) isValidPhoneNumber 
{ 
    NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})"; 
    NSPredicate *testPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
    BOOL validationResult = [testPredicate evaluateWithObject: self]; 
    return validationResult; 
} 

Смотрите, если это помогает вам

1

Как насчет этого?

NSString *forNumeric = @"\\+?[0-9]{6,13}"; 
NSPredicate *predicate; 
predicate = [NSPredicate predicateWithFormat:@"self matches %@", forNumeric]; 
BOOL isMatch = [predicate evaluateWithObject:@"+1234567890123"]; 

if (isMatch) NSLog(@"Matched"); 
else NSLog(@"Not matched"); 
4
NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})"; 

Найдя ведущий 0 или ведущий +44 один раз, почему снова искать его?

Basic упрощение приводит к

NSString * regex = @"((07|00440?7|\\+440?7)\\d{9})"; 

затем к

NSString * regex = @"((07|(00|\\+)440?7)\\d{9})"; 

затем к

NSString * regex = @"((0|(00|\\+)440?)7\\d{9})"; 

но 00 не только общий префикс набора, 011 используется в США и Канады.

Добавим, что, и поворачивая порядок круглые, дает:

NSString * regex = @"(^((0(0|11)|\\+)440?|0)7\\d{9}$)"; 

или предпочтительно

NSString * regex = @"(^(?:(?:0(?:0|11)|\\+)(44)0?|0)(7\\d{9}$))"; 

позволяя 00447, 011447, +447, 004407, 0114407, +4407, 07 в начале , и с группами, не связанными с захватом.

Для более широкого входного согласования формата, что позволяет различные знаки препинания (дефис, скобки, пробелы) используют

NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7\\d{9})$)"; 

Extract код 44 страны в $ 1 (пустое значение, если введенное число в 07 ...) и 10- цифровой NSN в $ 2.

Однако имейте в виду, что цифры, начинающиеся с 070 и 076 (кроме 07624), НЕ являются мобильными номерами.

В последней схеме:

NSString * regex = @"(^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)(44)\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(7([1-5789]\\d{2}|624)\\)?[\\s-]?\\d{6}))$)"; 

Извлечение NSN в $ 2, затем удалить все цифры, не являющиеся из него для дальнейшей обработки.

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