Проверка телефонных номеров - PullRequest
2 голосов
/ 25 января 2012

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

Номер телефонаформат должен быть международным, есть ли Regex для проверки номера телефона в 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");
    }

Ответы [ 6 ]

4 голосов
/ 06 ноября 2012
    NSString * regex = @"((07|00447|004407|\\+4407|\\+447)\\d{9})";

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

Базовое упрощение приводит к

    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})$)";

Извлечение 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, затем удалите из него все нецифровые символы для дальнейшей обработки.

1 голос
/ 25 января 2012

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

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

NSString * forNumeric = @"^(\\+?)(\\d{13})$";
1 голос
/ 25 января 2012

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

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");
1 голос
/ 25 января 2012
NSDataDetector *matchdetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber
                                                                error:&error];
NSUInteger matchNumber = [matchdetector numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];

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

textField.dataDetectorTypes = UIDataDetectorTypePhoneNumber;
0 голосов
/ 25 января 2012

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

- (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;
}

Посмотрите, поможет ли это вам

0 голосов
/ 25 января 2012

вы можете попробовать использовать NSDataDetector:

http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSDataDetector_Class/Reference/Reference.html

доступно в iOS4 +

...