检查NSString是否有特殊字符

时间:2010-02-19 14:48:07

标签: cocoa nsstring special-characters

我想检查NSString是否有特殊字符,即a-z,A-Z和0-9以外的任何字符。

我不需要检查有多少特殊字符或它们的位置,我只需要知道特定字符串是否包含任何字符。如果是,那么我希望能够显示“错误!”或类似的内容。

例如, jHfd9982 可以,但 asdJh992 @ 不是。

此外,不应允许带有重音符号,变音符号等的字母。

我该怎么做?

谢谢!

迈克尔

5 个答案:

答案 0 :(得分:108)

NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"] invertedSet];

if ([aString rangeOfCharacterFromSet:set].location != NSNotFound) {
  NSLog(@"This string contains illegal characters");
}

您也可以使用正则表达式(此语法来自RegexKitLite:http://regexkit.sourceforge.net):

if ([aString isMatchedByRegex:@"[^a-zA-Z0-9]"]) {
  NSLog(@"This string contains illegal characters");
}

答案 1 :(得分:7)

这里可以用来检查字符串的代码是否有任何特殊字符

NSString *string = <your string>;

NSString *specialCharacterString = @"!~`@#$%^&*-+();:={}[],.<>?\\/\"\'";
NSCharacterSet *specialCharacterSet = [NSCharacterSet
                                       characterSetWithCharactersInString:specialCharacterString];

if ([string.lowercaseString rangeOfCharacterFromSet:specialCharacterSet].length) {                
    NSLog(@"contains special characters");
}

答案 2 :(得分:6)

如果无法在字符串中找到任何字符,则需要使用字符集搜索NSString,然后rangeOfCharacterFromSet:将返回{NSNotFound,0}的范围

字符集将类似于[NSCharacterSet symbolCharacterSet]或您自己的集合。请注意,您也可以反转字符集,以便拥有一组可接受的字符

答案 3 :(得分:4)

如果你想删除特殊字符&amp;在编辑时,任何字符串(甚至是文本字段文本)中的数字都非常方便:

#define ACCEPTABLE_CHARACTERS @"!~`@#$%^&*-+();:=_{}[],.<>?\\/|\"\'0123456789"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS];

    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

    return (![string isEqualToString:filtered]) ? NO : YES;
}

答案 4 :(得分:1)

此代码仅允许UITextField输入中的数字。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
        return NO;
    else
        return YES;

}