检查NSString是否只是字母

时间:2015-06-07 23:11:35

标签: objective-c regex nsstring

确保NSString仅包含字母a-z和A-Z的最佳方法是什么。

我尝试过以下代码,但由于某些原因它无法运行:

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

2 个答案:

答案 0 :(得分: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

}

答案 1 :(得分: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;
}