В xcode кто-нибудь знает, как проверить, что строка — это номер телефона такого типа (123) 456-7890?

#regex #phone-number

#регулярное выражение #номер телефона

Вопрос:

Я пробовал это, и это не работает:

 range1 = NSMakeRange(0,[string length]);
NSRegularExpression *regex;
regex = [NSRegularExpression 
        regularExpressionWithPattern:@"([0-9]{3}) [0-9]{3}-[0-9]{4}"
        options:0 error:NULL];
range2 = [regex rangeOfFirstMatchInString:string options:0 range:range1];
if (NSEqualRanges(range1, range2)) {
    return YES;
}
  

// range2 всегда равен диапазону «не найден».
// Спасибо

Комментарии:

1. Вы пробовали экранировать скобки, например: ([0-9]{3}) [0-9]{3}-[0-9]{4} ?

2. Да, я пытался избежать скобок. Если я экранирую скобки, я получаю предупреждение «Неизвестная escape-последовательность x29», и оно все равно не работает. Ребята, пожалуйста, помогите. Я до сих пор не понял этого. Спасибо.

Ответ №1:

Я думаю, это должно быть «» (двойные косые черты), а не «» (одинарная косая черта)..

 - (BOOL) validatePhone: (NSString *) candidate {
    NSString *phoneRegex = @"\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})";

    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
    return [phoneTest evaluateWithObject:candidate];
}