Как проверить номер телефона с символом + в задаче c? - PullRequest
1 голос
/ 14 марта 2011

Я так запутался в методах регулярных выражений. Мое требование состоит в том, чтобы подтвердить номер телефона, который может содержать символ + в своем префиксе. Тогда все символы должны быть только цифрами. Для этого, как я могу создать регулярное выражение в цели c.

Ответы [ 6 ]

3 голосов
/ 21 марта 2012

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

- (BOOL)validatePhoneNumberWithString:(NSString *)string {
    if (nil == string || ([string length] < 2 ) )
        return NO;

    NSError *error;
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:&error];
    NSArray *matches = [detector matchesInString:string options:0 range:NSMakeRange(0, [string length])];
    for (NSTextCheckingResult *match in matches) {
        if ([match resultType] == NSTextCheckingTypePhoneNumber) {
            NSString *phoneNumber = [match phoneNumber];
            if ([string isEqualToString:phoneNumber]) {
                return YES;
            }
        }
    }

    return NO;
}
0 голосов
/ 02 марта 2013

В этом посте хорошо объясняется регулярное выражение - http://blog.stevenlevithan.com/archives/validate-phone-number. Вы должны использовать "\" вместо "\", чтобы препроцессор Objective C не интерпретировал escape-коды регулярного выражения как escape-коды символьных строк.

Вот строка NSS, которую вы бы использовали для запрошенного совпадения

NSString *northAmRegexWithOptionalLeadingOne = @"^(?:\\+?1[-. ]?)?\\(?([2-9][0-8][0-9])\\)?[-. ]?([2-9][0-9]{2})[-. ]?([0-9]{4})$";
0 голосов
/ 14 марта 2011

+*[0-9]{length of phone}. Должно работать.

0 голосов
/ 14 марта 2011
^\+?[0-9]*$

должно сделать:

^      # start of string
\+?    # match zero or one + characters
[0-9]* # match any number of digits
$      # end of string

Чтобы использовать регулярное выражение в строке, вам нужно удвоить обратную косую черту: @"^\\+?[0-9]*$" должно работать в соответствии с другими примерами регулярных выражений, которые я видел, но я не знаю Objective-C и могу ошибаться в этом .

0 голосов
/ 14 марта 2011

Я бы не сказал, что это окончательный ответ, но он должен дать вам начало.

^\x2b[0-9]+

Будет соответствовать любой строке, начинающейся с '+', а затем любому количеству чисел больше 0.

Например:

+441312002000  - Full phone number matched.
+4413120c2000  - +4413120 is matched.
++441312002000 - No match 
441312002000   - No Match

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

0 голосов
/ 14 марта 2011

Используйте RegexKitLite, проверьте следующее http://regexkit.sourceforge.net/RegexKitLite/

...