2013-12-18 72 views
0

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

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

但有没有检查这个的一个简单的方法,因为我不希望有单独检查每一个坏的字符,或者有限制的一种方式只需输入A到Z字符?

+1

不确定是否有这方面的风格指南信息。更好的行为可能是在输入(shouldChangeCharactersInRange)期间捕获禁止的字符,不要插入它们并给出提醒用户有效字符的警报。 @nhgrif答案在这方面也非常好。更简单,因为你只是测试输入是否在字符集中。 – danh

回答

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有一个所有字符集的列表。

+0

这是一个很好的答案,但仍然需要我考虑有没有非A-Z角色。没有办法限制进入A-Z吗? – RGriffiths

+0

你只想让字母? – nhgrif

+0

是的 - 可能的数字太多,但没有其他 – RGriffiths

0

componentsSeparatedBy方法将潜在地创建一大堆对象作为副作用。如果不需要子字符串,则使用类似

rangeOfCharacterFromSet:options:range的方法会更有效率。

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

相关问题