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 
  • Проверка NSPredicate NSArray, если объект имеет один из нескольких идентификаторов
  • Объект поиска NSPredicate с атрибутом в NSSet
  • NSPredicate на вложенном массиве с NSDictionary как объект
  • Получить все значения данного ключа с помощью NSPredicate
  • Каков наилучший способ создания этой строки? (NSMutableString ...)
  • Имя атрибута CoreData NSPredicate
  • наиболее эффективный способ поиска с использованием оператора NSPredicate OR
  • Как указать диапазон с NSPredicate в Objective C
  • NSPredicate для регулярного поиска
  • NSFetchRequest с отличными свойствами
  • Как использовать NSPredicate с прикованной виртуальной собственностью?
  • NSPredicate для соответствия "любой записи в NSDatabase со значением, содержащим строку"
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.