我想检查NSString是否有特殊字符,即a-z,A-Z和0-9以外的任何字符。
我不需要检查有多少特殊字符或它们的位置,我只需要知道特定字符串是否包含任何字符。如果是,那么我希望能够显示“错误!”或类似的内容。
例如, jHfd9982 可以,但 asdJh992 @ 不是。
此外,不应允许带有重音符号,变音符号等的字母。
我该怎么做?
谢谢!
迈克尔
答案 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;
}