通常在编辑框中输入一些货品数量,金额时,我们都会做一些输入的判断限制。例如不能输入非法字符,只能输入数字等等。现把最近遇到的一些输入限制需求展现如下:
1、输入小数位不能超过两位;
2、不能重复输入小数点;
3、不能输入除数字以外的字符(但不包括退格键,负号键);
4、限制长度为最小为1,最大为11。
为了实现以上需求,主要是依靠以下UITextFieldDelegate的一个协议方法来实现的:
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
功能:
把textField中位置为range的字符串替换为string字符串;
此函数在textField内容被修改时调用;
返回值:
YES,表示修改生效;NO,表示不做修改,textField的内容不变。
参数说明:
textField:响应UITextFieldDelegate协议的UITextField控件。
range: UITextField控件中光标选中的字符串,即被替换的字符串;
range.length为0时,表示在位置range.location插入string。
string: 替换字符串;
string.length为0时,表示点击了删除delete键。
以下所有的代码需要写在该函数中。
1、输入小数位不能超过两位
/**
* 检查浮点数小数位并校验小数点合法性
*
* @param range 浮点数总长度
* @param dotPlaces 小数位
* @param decimal 浮点数
* @param string 当前输入的数值
*
* @return YES:没有小数点或者限制两位浮点数
*/
+ (BOOL)checkDecimalDotPlaces:(NSRange)range dotPlaces:(NSNumber *)dotPlaces decimal:(NSString *)decimal{
BOOL bHaveDot = false;
if (dotPlaces.integerValue < 0) {
dotPlaces = @0;
}
if ([decimal rangeOfString:@"."].location == NSNotFound){
bHaveDot = false;
}else{
bHaveDot = true;
}
if (bHaveDot) {
//判断小数点的位数
NSRangeran = [decimal rangeOfString:@"."];
if(range.location- ran.location > dotPlaces.integerValue) {
returnNO;
}
}
returnYES;
}
2、不能重复输入小数点
//不能再输入小数点
if ([string rangeOfString:@"."].location != NSNotFound&& [textField.text rangeOfString:@"."].location ==NSNotFound) {
returnNO;
}
3、不能输入除数字以外的字符(但不包括退格键,负号键)
//不能输入字符串
if ([string rangeOfString:@"."].location == NSNotFound) {
NSRange range = [string rangeOfString:@"^[0-9-]+$"options:NSRegularExpressionSearch];
if(range.location== NSNotFound) {
returnNO;
}
}
//删除delete键
if([string isEqualToString:@""])
{
returnYES;
}
4、限制长度为最小为1位,最大为11位
NSString*pwdRegex = @"[0-9]{1,10}";
NSPredicate*predicate = [NSPredicate predicateWithFormat:@"SELFMATCHES%@",pwdRegex];
if([predicate evaluateWithObject:textField.text]|| ![textField.text notEmpty]) {
returnYES;
}else{
returnNO;
}
另外,对于字符串的判断可以选择在NSString的分类扩展里进行设置,如NSString+Extension。
总代码如下:
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{
//不能再输入小数点
if ([string rangeOfString:@"."].location != NSNotFound&& [NSStringisHaveDot:textField.text]) {
returnNO;
}
//delete
if ([string isEqualToString:@""]) {
returnYES;
}
//不能输入字符串
if ([string rangeOfString:@"."].location == NSNotFound) {
NSRangerange = [string rangeOfString:@"^[0-9]+$"options:NSRegularExpressionSearch];
if(range.location== NSNotFound) {
returnNO;
}
}
//限制长度为最小为1,最大为11位
NSString *pwdRegex = @"[0-9]{1,10}";
NSPredicate*predicate = [NSPredicate predicateWithFormat:@"SELFMATCHES%@",pwdRegex];
if([predicate evaluateWithObject:textField.text]|| ![textField.text notEmpty]) {
returnYES;
}else{
returnNO;
}
//限制小数位长度不超过2
if (![NSString checkDecimalDotPlaces:range dotPlaces:ZHJFloatDotPlaces decimal:textField.text]) {
returnNO;
}
returnYES;
}
网友评论