身份证号键盘输入限制开发总结:
需要注意的问题:
1, 输入框限制的输入字符
2,输入框限制的输入个数限制
3,不同样式的原生键盘,比如九宫格键盘,英文状态下,长按键盘方式输入字母x 会出现一次连出两个x的字符(即使已超过了限制的 位数), 并且由于对字符限制了位数不能再变化输入的内容,所以也不能删除单个字符
解决方式:
1,输入框限制的输入字符(知识点:字符串_过滤处理NSCharacterSet 与invertedSet)
//限制输入内容
NSCharacterSet* cs;
cs = [[NSCharacterSet characterSetWithCharactersInString:limitStr] invertedSet];
NSString* filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
BOOL canChange = [string isEqualToString:filtered];
return canChange;
备注:
(1)limitStr :是一个包含所有符合要求字符的字符串;
(2) invertedSet方法是去反字符,把所有的 除了limitStr里的字符都找出来(包含去空格功能);
(3)componentsSeparatedByCharactersInSet : 字符串的拆分 ,在字符串中遇到字符集合类NSCharacterSet 的 字符就拆分 ,返回的是一个数组类型,用法:
有字符串“A~B^C" ,我拆分为 "A", "B" 和 "C"?
NSString *str = @"A~B^C";
NSArray *arr = [str componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"^~"]];
NSLog(@"%@", arr);
(4) componentsJoinedByString :数组中所有元素拼接成字符串,ByString后面的参数是拼接各个元素的分隔符。
如:[array compontsJoinedByString:@","]; ,即,把数组array 中的所有元素通过分隔符拼接成字符串。
(5)characterSetWithCharactersInString :通过 字符串参数 获取 NSCharacterSet 字符集合
过滤掉非法字符的核心思路:
通过合法字符串构建的NSCharacterSet 去反(invertedSet) 获取的非法字符集合对象NSCharacterSet类,先将要判断的字符串通过非法字符集合作为分隔符 分割字符串 成一个个元素返回一个数组(作为分隔符的非法字符在遇到的时候不仅要分割字符串,并且去掉,那么数组中装的都是合法 字符), 再将该数组进行拼接字符串 ,这样就可以过滤掉非法字符。