UITextField 输入框限制特殊字符的输入,只允许中英文及数字输入,直接上代码
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// 1. 去空格,英文输入时联想状态包含空格
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// 2. 当输入符合规则 或者退格键 或者回车键时允许输入
if ([self isInputCharAvailable:string] || [string isEqualToString:@""] || [string isEqualToString:@"\n"]) {
return YES;
} else {
return NO;
}
return YES;
}
/// 输入字符是否合法 (字母、数字、中文的判断(不包括空格))
- (BOOL)isInputCharAvailable:(NSString *)str {
// ➋➌➍➎➏➐➑➒ 中文键盘拼音9键输入
NSString *pattern = @"^[➋➌➍➎➏➐➑➒a-zA-Z\u4E00-\u9FA5\\d]*$";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
BOOL isMatch = [pred evaluateWithObject:str];
return isMatch;
}
坑:
- 中文键盘拼音9键输入,拦截到的字符是➋➌➍➎➏➐➑➒这些玩意
2.英文输入时单词联想时,前面默认多了一个空格,所以多了第一步的处理
3.对于种类繁多的特殊字符,上面的方法依然有一些漏网字符,如🉐🈵🈲🈶🈺🈸🈴,如果想赶尽杀绝,需要单独处理了