我有一系列UITextFields
,可让用户输入文字。我需要检查文本中是否有不允许的字符。我可以有一系列的行,如:
noOfBadChars = [[textBox1.text componentsSeparatedByString:@"&"] count];
noOfBadChars = noOfBadChars + [[textBox2.text componentsSeparatedByString:@"*"] count];
if (noOfBadChars>1)
{
….
}
但是有一种简单的方法来检查这个,因为我不想分别检查每个坏的字符,或者可能有一种方法将条目限制为只有A到Z的字符?
答案 0 :(得分:1)
NSCharacterSet *charsToRemove = [NSCharacterSet
characterSetWithCharactersInString:@"example"];
将example
替换为您要删除的字符。
NSString *finalString = [[originalString
componentsSeperatedByCharactersInCharacterSet: charsToRemove]
componentsJoinedByString: @""];
这将使用删除了所有字符的文本替换输入的文本。
否则,如果你只是想检查它是否包含一个坏字符,你可以这样做:
NSArray *temp = [originalString componentsSeperatedByCharactersInCharacterSet:
charsToRemove];
if ([temp count] > 1) {
// do stuff
}
NSCharacterSet
有许多常见字符集可供常用。
NSCharacterSet *charsToKeep = [NSCharacterSet letterCharacterSet];
这将使charsToKeep
成为仅包含字母的字符集。现在,您可以使用invertedSet
来获得反转。
NSCharacterSet *charsToRemove = [charsToKeep
invertedSet];
charsToRemove
现在将成为一个字符集,其中包含letterCharacterSet
内不存在的每个字符。
您可以在一行中完成所有操作:
NSCharacterSet *charsToRemove = [[NSCharacterSet letterCharacterSet]
invertedSet];
如果您想要字母和数字,请使用alphanumericCharacterSet
代替letterCharacterSet
。
official documentation包含所有字符集的列表。
答案 1 :(得分:0)
componentsSeparatedBy方法可能会创建一大堆对象作为副作用。如果您不需要子字符串,那么使用像
这样的方法会更有效rangeOfCharacterFromSet:选项:范围
您可以编写一个循环来遍历字符串,从不需要的字符集中查找每个字符。