我正在寻找检查NSString包含数字和字母字符的最佳方法。 到目前为止我得到的是下面的代码,但这只是告诉我没有输入任何不是数字或字母的字符。
if( [[myNSString stringByTrimmingCharactersInSet:
[NSCharacterSet alphanumericCharacterSet]] isEqualToString:@""]){
//The string only contains alpha or numerical characters.
//But now I want to check that both character sets are present ?
}
答案 0 :(得分:14)
修剪letterCharacterSet和decimalDigitCharacterSet并检查生成的字符串是否不等于原始字符串:
if (![[myOriginalString stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]] isEqualToString:myOriginalString]
&& ![[myOriginalString stringByTrimmingCharactersInSet:[NSCharacterSet letterCharacterSet]] isEqualToString:myOriginalString]) {
...
}
答案 1 :(得分:5)
kovpas'答案可以正常工作。如果数字嵌入在字母之间,反之亦然,例如'abc123abc',则会出现问题。这是一个解决方案:
if (![[[str componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""] isEqualToString:str]
&& ![[[str componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""] isEqualToString:str]) {
....
}
答案 2 :(得分:4)
我不确定之前的两个答案是否符合要求,因此这是对更严格的要求解释的答案。
从原始帖子的代码中的评论中获取要求:
//The string only contains alpha or numerical characters.
//But now I want to check that both character sets are present?
这意味着传递测试的字符串必须只包含数字和字母以及每个字符串中的至少一个。
NSString
的{{1}}如果字符串属于某个字符集,则会在字符串中找到该字符,因此我们可以使用该字符。
rangeOfCharacterFromSet:
如文档中所述,NSString *string = // ... string to test;
NSCharacterSet *illegalChars = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
// Test if there is an illegal character in the string
BOOL hasIllegalCharacter = [string rangeOfCharacterFromSet: illegalCharacterSet].location != NSNotFound;
BOOL hasLetter = [string rangeOfCharacterFromSet: [NSCharacterSet letterCharacterSet]].location != NSNotFound;
BOOL hasDigit = [string rangeOfCharacterFromSet: [NSCharacterSet decimalDigitCharacterSet]].location != NSNotFound;
if (hasDigit && hasLetter && !hasIllegalCharacter ) {
// String OK
}
返回NSRange {NSNotFound,0},以防在字符串中找不到该字符集中的字符。这类似于在Cocoa中搜索字符串中的字符串或字符的其他方法。