Demo:
限制只能有数字
#define NUMBERS @"0123456789"
`
`
`
//限制只能输入特定的字符
//invertedSet方法是去反字符,把所有的除了kNumber里的字符都找出来(包含去空格功能)
NSCharacterSet *cs;
cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分离出数组,数组按@""分离出字符串
canChange = [string isEqualToString:filtered];
一.stringByTrimmingCharactersInSet过滤
//有字符串“A~B^C_D>E”,拆分出单个字母:
NSString *str =@" A~B^C_D>E ";
str = [str stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];//去掉前边和后边的空格
NSCharacterSet * charSet = [NSCharacterSetcharacterSetWithCharactersInString:@"^~_>"];
NSArray *arr = [strcomponentsSeparatedByCharactersInSet:charSet];
//输出看效果
[arr enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop) {
NSLog(@"A~B^C_D->[%@]", obj);
}];
PS:用stringByTrimmingCharactersInSet这个方法进行过滤,它能做到的仅仅是把字符串两端的非法字符过滤,但是包含在字符串里非法字符则无能为力
二.componentsSeparatedByCharactersInSet: 和componentsJoinedByString:过滤
NSString *string =@" 123,45_6 7/8>9a ";
NSString * kNumber =@"0123456789.";
NSCharacterSet *numberSet = [[NSCharacterSetcharacterSetWithCharactersInString:kNumber]invertedSet];
//invertedSet方法是去反字符,把所有的除了kNumber里的字符都找出来(包含去空格功能)
NSString *fieldString = [[stringcomponentsSeparatedByCharactersInSet:numberSet]componentsJoinedByString:@""];
NSLog(@"number__[%@]", fieldString);
另:
去除 username中的空格,table newline,nextline代码如下:(三行代码)
NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString * username = [mUsernameField stringValue];
username = [username stringByTrimmingCharactersInSet:whitespace];
第1行是是去除2端的空格
第2行是去除回车
NSString *temptext = [messageTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *text = [temptext stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet ]];
PS:NSCharacterSet其实是许多字符或者数字或者符号的组合,由于NSString中有全角符号和半角符号, 因此有些符号要包括全角和半角的
三.stringByReplacingOccurrencesOfString替代
使用stringByReplacingOccurrencesOfString这个方法将字符串里的非法字符逐个替代。
具体如下:
1 tempString = [tempString stringByReplacingOccurrencesOfString:@" " withString:@""];
2 tempString = [tempString stringByReplacingOccurrencesOfString:@"#" withString:@""];
3 tempString = [tempString stringByReplacingOccurrencesOfString:@"*" withString:@""];
4 tempString = [tempString stringByReplacingOccurrencesOfString:@"+" withString:@""];
5 tempString = [tempString stringByReplacingOccurrencesOfString:@"-" withString:@""];
PS:这样做比较烦的一个问题就是,如果要过滤掉的非法字符有很多的话,就得写多行这种替代代码。
//另:string<->array的转换
将string字符串转换为array数组
NSArray *array = [Str componentsSeparatedByString:@","];
==反向方法
将array数组转换为string字符串
NSString *tempString = [mutableArray componentsJoinedByString:@","];
参考自:
http://www.th7.cn/Program/IOS/201506/489090.shtml
http://blog.sina.com.cn/s/blog_60f977e70101fbid.html
http://blog.sina.com.cn/s/blog_5421851501014xif.html