2015-06-07 7 views
0

Каков наилучший способ убедиться, что NSString содержит только буквы a-z и A-Z.Проверьте, является ли NSString только буквы

Я пробовал следующий код, но он не работает по какой-то причине:

NSString *myegex = @"[A-Za-z]"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", myregex]; 
if (![emailTest evaluateWithObject:self.initials.text]) { 
    // print error 
    return; 
} 
+2

Что «это не работает по какой-то причине» означает? Не удается ли его скомпилировать? Это бросание исключения во время выполнения? Есть ли ошибка времени компиляции? Производит ли это непредвиденные результаты (каковы результаты для ввода и как это соотносится с намеченными результатами)? Является ли это запуском ракет? Что происходит? – nhgrif

ответ

10

Вы можете сделать это более простым способом, создав свой собственный NSCharacterSet затем проверять строку против этого набора с rangeOfCharacterFromSet:

//Create character set 
NSCharacterSet *validChars = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"]; 

//Invert the set 
validChars = [validChars invertedSet]; 

//Check against that 
NSRange range = [myString rangeOfCharacterFromSet:validChars]; 
if (NSNotFound != range.location) { 

//invalid chars found 

} 
+1

Ничего, но я бы использовал ['+ [NSCharacterSet letterCharacterSet]'] (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/index.html#// apple_ref/occ/clm/NSCharacterSet/letterCharacterSet) вместо жесткого кодирования всех букв. – zpasternack

+0

@zpasternack Ну, я видел его строку под названием 'emailTest' и решил, что он пытается проверить адрес электронной почты, который может содержать более чем только буквы. Это в основном взлом, чтобы избежать сложного регулярного выражения, хотя в этом случае OP может потребоваться именно это. – Michael

+0

@zpasternack letterCharacterSet Включает в себя знаки пунктуации и другие знаки. = (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/#//apple_ref/occ/clm/NSCharacterSet/letterCharacterSet – jungledev

0

Я не знаю, как работает Objective-C движок регулярных выражений, но вы можете использовать анкеры ^ и $, чтобы проверить, если ваша строка начинается и заканчивается с буквами, используя это регулярное выражение:

^[A-Za-z]+$ 

Использование кода будет:

NSString *myegex = @"^[A-Za-z]+$"; 
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", myregex]; 
if (![emailTest evaluateWithObject:self.initials.text]) { 
    // print error 
    return; 
} 
Смежные вопросы