识别字符串中是否存在不需要的字符

时间:2013-12-18 00:35:05

标签: ios objective-c

我有一系列UITextFields,可让用户输入文字。我需要检查文本中是否有不允许的字符。我可以有一系列的行,如:

noOfBadChars = [[textBox1.text componentsSeparatedByString:@"&"] count];
noOfBadChars = noOfBadChars + [[textBox2.text componentsSeparatedByString:@"*"] count];
if (noOfBadChars>1)
{
    ….
}

但是有一种简单的方法来检查这个,因为我不想分别检查每个坏的字符,或者可能有一种方法将条目限制为只有A到Z的字符?

2 个答案:

答案 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:选项:范围

您可以编写一个循环来遍历字符串,从不需要的字符集中查找每个字符。