NSPredicate для номера телефона

Формат моего номера телефона (987) 786-5645.

- (BOOL)validatePhoneNumberWithString:(NSString*)phone { NSString *pNRegex = @"[(0-9)]{3}+\\ +\\[0-9-]{3}+\\[0-9]{4}"; NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; return [PNTest evaluateWithObject:phone]; } 

Я использую код выше.

Каким должно быть точное правило регулярных выражений для этого? Я также могу найти цифры и скобки.

Что я должен использовать для обнаружения этого пробела после закрытия скобки?

4 Solutions collect form web for “NSPredicate для номера телефона”

Замените pNRegex на это,

 NSString *pNRegex = @"^(\\([0-9]{3}\\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$"; 

Надеюсь, это поможет вам.

Возможно, лучшим решением было бы удалить все нечисловые символы номера телефона для проверки, чтобы вы просто оставили строку чисел.

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

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

 - (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber { NSCharacterSet *illegalCharacters = [NSCharacterSet characterSetWithCharactersInString:@" +()-"]; return [[phoneNumber componentsSeparatedByCharactersInSet:illegalCharacters] componentsJoinedByString:@""]; } 

Поэтому вместо +1 (555) 123-4567

Вы просто сравните 15551234567 . Если вы храните это в базе данных, вы, вероятно, хотите контролировать формат в любом случае для отображения в пользовательском интерфейсе, а сравнение с целым числом быстрее, чем сравнение строк для больших наборов данных, поэтому вы можете просто сохранить [sanitizedPhoneNumber intValue]; в базе данных как NSNumber

Другой метод, использующий простое Regex, чтобы разрешить только числа 0-9 ( источник ):

 - (NSString *)sanitizePhoneNumberString:(NSString *)phoneNumber { return [phoneNumber stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [phoneNumber length])]; } 

Используйте это выражение, оно сработало для меня

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

проверьте это, он отлично работает для вашей формы,

если вы хотите дать специальные chrectars, такие как space, (,), тогда добавьте этот charectar с //

  NSString *phone=@"(123)123-1234"; NSString *pNRegex = @"\\([0-9]{3}\\)[0-9]{3}\\-[0-9]{4}"; NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; BOOL check=[PNTest evaluateWithObject:phone ]; NSLog(@"%i",check); 

O / P: –

 (123)123-1234 - check=1 (123123-1234 - check=0 (123) 123-1234 - check=0 

если вы хотите дать пространство после конечной скобки, используйте этот,

 NSString *phone=@"(123) 123-1234"; NSString *pNRegex = @"\\([0-9]{3}\\)\\ [0-9]{3}\\-[0-9]{4}"; NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex]; BOOL check=[PNTest evaluateWithObject:phone ]; NSLog(@"%i",check); 

O / P: –

 (123) 123-1234 - check=1 (123123-1234 - check=0 (123)123-1234 - check=0 
  • RegEx: как использовать регулярное выражение с помощью NSPredicate?
  • NSPredicate isKindOfClass работает только для не для
  • NSPredicate не возвращает результаты с запросом на выборку, работает с фильтрацией массивов
  • NSPredicate - Невозможно проанализировать строку формата
  • Поиск через NSMutableArray объектов с помощью NSPredicate
  • Предикат NSPredicateWithFormat: аргументArray: только оценка первого аргумента
  • eventsMatchingPredicate не находит последнюю дату в событии, охватывающем несколько дней
  • iOS: NSPredicate, использующий NSDate для сравнения
  • NSPredicate на вложенном массиве с NSDictionary как объект
  • Как искать все слова из строки ввода в ios?
  • CloudKit - NSPredicate для поиска всех записей, содержащих указанный CKReference, в списке ссылок
  • Interesting Posts

    iOS Предотвращает позиционирование фиксированного элемента при масштабировании

    Как я могу перейти в AFNetworking 3.0?

    Есть ли простой способ (в Cocoa / iOS) поставить очередь вызова метода для запуска один раз в следующем цикле запуска?

    Contex Drawing + Pagination

    Внедрение OAuth 1.0 в приложении iOS (Withings api)

    Ячейки UITableView не ноль при инициализации

    Предотвращение перемещения пользовательского интерфейса при появлении клавиатуры

    Как нарисовать маршрут между двумя точками, используя MapKit в Swift?

    Как очистить экран IOS

    Вращение MKMapView

    Как просто удалить старые данные ядра и перестроить новый?

    Сколько сертификатов iOS Ad Hoc можно создать? Ограничение сертификатов?

    Отключение нескольких контроллеров просмотра сразу (iOS 8)

    Проблема с entityForName и ManagedObjectContext при расширении учебного материала

    Как получить UIImage из AppIcon?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.