Как проверить номер телефона и - - PullRequest
2 голосов
/ 06 октября 2011

Для проверки по номеру телефона и в комплекте -

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

Я должен подтвердить номер телефона с -

пример 333-333-3333 (который является действительным числом).

как настроить действительный Regex с - на номер телефона

Ответы [ 5 ]

2 голосов
/ 06 октября 2011

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

  1. начало в начале строки
  2. соответствует одному + (или, возможно, 1 или 0), который кажется неоднозначный (но может не зависеть от реализации), потому что захватить скобки: () разрывает отношения \+ и ?
  3. возможно, неуместен :
  4. соответствует любой цифре 0-9 1 или 0 раз 6-14 раз
  5. затем одна цифра 0-9
  6. затем конец строки.

также обратите внимание, что любой обратный слеш должен быть удвоен ... @"\\b" для границы слова. Вы можете попробовать что-то вроде ...

@"\\b[\\d]{3}\\-[\\d]{3}\\-[\\d]{4}\\b"
would I think match your example, but it wouldn't match
(555) 555 - 5555 or
555.555.5555 or
+44 1865  55555
1 голос
/ 06 октября 2011

Оба других ответа будут работать, но они потерпят неудачу в значительной степени:

  1. Они не интернационализированы. Они не учитывают скобки вокруг кода города, или кода страны, или пробелов вместо дефисов. Все это действительные перестановки телефонных номеров.
  2. Они хрупкие. Что делать, если кто-то не хочет вводить код города? Что если что-то изменится и все телефонные номера в США вдруг получат дополнительную цифру? Ваш код сломается?

Ответ на этот вопрос - позволить фреймворкам справиться с этим за вас. Существует класс NSDataDetector для iOS 4+ и OS X 10.7+, который вы можете использовать для обнаружения физических адресов, адресов электронной почты, ссылок, информации о транзите, телефонных номеров и т. Д.

В документации приведен пример того, как его использовать. Это гораздо лучшее решение, потому что это код, который вам не нужно поддерживать. Это будет работать в любой точке мира.

1 голос
/ 06 октября 2011

Obj-C имеет NSPredicate для этого.Насколько я помню, вы можете использовать такой код для своей задачи:

NSPredicate * Pred = [NSPredicate predicateWithFormat:@"SELF MATCHES '^\+(?:[0-9] ?){6,14}[0-9]$'"];    
bool ifYes = [Pred evaluateWithObject:_yourNSString]];

для более подробной информации смотрите в документации Apple.

Если вы хотите найти правильный reg.exp., Пожалуйста, используйтенекоторые библиотеки вроде: http://regexlib.com/DisplayPatterns.aspx?cattabindex=6&categoryId=7

0 голосов
/ 28 апреля 2017

// телефон без формата: (000) 000-0000

-(BOOL)numberValidation:(NSString*)phoneString
{

    NSString *phoneRegEx = @"\\([0-9]{3}\\)[0-9]{3}\\-[0-9]{4}";

    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegEx];

    BOOL result=[phoneTest evaluateWithObject:phoneString];
   return result;

}
0 голосов
/ 09 августа 2016

Просто предлагаю другой способ, как упоминалось @Dave DeLong и NSDataDetector.Один из лучших и элегантных способов, предоставляемых Apple.Кто может искать реализацию, вот фрагмент кода.

- (BOOL)applyPhoneValidation:(NSString*)theNumber
{
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:NULL];
    NSArray *matches = [detector matchesInString:theNumber options:0 range:NSMakeRange(0, theNumber.length)];
    BOOL isValidNumber = (NSInteger)matches.count;
    return isValidNumber;
}

Вернется 1 для действительного номера телефона.

Cheers Sanjay

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...