在项目开发中,经常会遇到限制文本框输入内容的需求,这就涉及到对字符串的处理,而对字符串的处理问题,正则表达式是一个利器,今天就用正则表达式来实现限制UITextField两位小数的输入。
在UITextField的代理方法中进行操作:
//参数一:range,要被替换的字符串的range,如果是新输入的,就没有字符串被替换,range.length = 0
//参数二:替换的字符串,即键盘即将输入或者即将粘贴到textField的string
//返回值为BOOL类型,YES表示允许替换,NO表示不允许
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
//新输入的
if (string.length == 0) {
return YES;
}
//第一个参数,被替换字符串的range
//第二个参数,即将键入或者粘贴的string
//返回的是改变过后的新str,即textfield的新的文本内容
NSString *checkStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
//正则表达式(只支持两位小数)
NSString *regex = @"^\\-?([1-9]\\d*|0)(\\.\\d{0,2})?$";
//判断新的文本内容是否符合要求
return [self isValid:checkStr withRegex:regex];
}
//检测改变过的文本是否匹配正则表达式,如果匹配表示可以键入,否则不能键入
- (BOOL) isValid:(NSString*)checkStr withRegex:(NSString*)regex
{
NSPredicate *predicte = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [predicte evaluateWithObject:checkStr];
}
解释的很详细,是不是超简单,几行代码就能搞定。
给大家推荐一下学习正则入门的一篇不错的链接,30分钟入门,对于刚接触正则的朋友来说,很适合