检查NSString是否只是字母

Apo*_*llo 0 regex objective-c nsstring

确保NSString仅包含字母az和AZ的最佳方法是什么.

我已经尝试了以下代码,但由于某些原因它不起作用:

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

Mic*_*ael 11

您可以通过创建自己的方法以更简单的方式执行此操作,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

}
Run Code Online (Sandbox Code Playgroud)

  • 很好,但我会使用[`+ [NSCharacterSet letterCharacterSet]`](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/index.html#//apple_ref/occ/clm/NSCharacterSet/letterCharacterSet)而不是对所有字母进行硬编码. (2认同)