我想检查一个NSString中是否含有特殊字符,即除了a-z、A-Z和0-9之外的任何字符。
我不需要检查字符串中有多少特殊字符或它们的位置,只需知道特定字符串是否包含这些字符。如果包含,则希望能够显示"错误!"或类似的内容。
例如,jHfd9982是可以的,但asdJh992@则不行。
此外,带重音符号、变音符号等的字母也不允许出现。
我该如何处理呢?
谢谢!
迈克尔
我想检查一个NSString中是否含有特殊字符,即除了a-z、A-Z和0-9之外的任何字符。
我不需要检查字符串中有多少特殊字符或它们的位置,只需知道特定字符串是否包含这些字符。如果包含,则希望能够显示"错误!"或类似的内容。
例如,jHfd9982是可以的,但asdJh992@则不行。
此外,带重音符号、变音符号等的字母也不允许出现。
我该如何处理呢?
谢谢!
迈克尔
NSCharacterSet * set = [[NSCharacterSet alphanumericCharacterSet] 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");
}
这里是代码,您可以使用它来检查字符串是否有任何特殊字符
NSString *string = <your string>;
NSString *specialCharacterString = @"!~`@#$%^&*-+();:={}[],.<>?\\/\"\'";
NSCharacterSet *specialCharacterSet = [NSCharacterSet
characterSetWithCharactersInString:specialCharacterString];
if ([string.lowercaseString rangeOfCharacterFromSet:specialCharacterSet].length) {
NSLog(@"contains special characters");
}
如果在NSString中找不到任何字符,您希望使用字符集进行搜索,则rangeOfCharacterFromSet:将返回{NSNotFound,0}的范围。
字符集可以是[NSCharacterSet symbolCharacterSet]或您自己的字符集。请注意,您还可以反转字符集,因此您可以拥有一组可接受的字符。
如果您想在编辑时从任何字符串(甚至文本字段文本)中删除特殊字符和数字,以下代码非常有用:
#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;
}
该代码只允许在UITextField输入数字。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
return NO;
else
return YES;
}
+alphanumericCharacterSet
是在5年前出现的,但这个答案是10年前的... ;) 我已经更新了答案。 - Dave DeLong