前言:ASCII表的主要作用一般:1.字符与int(貌似是int吧)互转。
2.进行大小判断,以此来“划定范围”
{
if ([textField.text rangeOfString:@"."].location == NSNotFound) {
_isHaveDian = NO;
}
if ([string length] > 0) {
//注意这里的index为0,表明这个方法是一个字符一个字符地触发的吗?
unichar single = [string characterAtIndex:0];//当前输入的字符
//这里是字符根据ASCII表转成int类型进行比较,(小于大于号就暴露了其基本数据类型的面目了,么么哒)
if ((single >= '0' && single <= '9') || single == '.') {//数据格式正确
//首字母不能为0和小数点
//第一个字符的时候,textField居然为空!
if([textField.text length] == 0){
if(single == '.') {
[self showError:@"亲,第一个数字不能为小数点"];
//不单单是提示而且顺便还替换了
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
if (single == '0') {
[self showError:@"亲,第一个数字不能为0"];
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
//输入的字符是否是小数点
if (single == '.') {
if(!_isHaveDian)//text中还没有小数点
{
_isHaveDian = YES;
return YES;
}else{
[self showError:@"亲,您已经输入过小数点了"];
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}else{
if (_isHaveDian) {//存在小数点
/*
限制小数点关键的一步
*/
//判断小数点的位数
NSRange ran = [textField.text rangeOfString:@"."];
//range.location当前字符所在textField.text的位置
if (range.location - ran.location <= 2) {
return YES;
}else{
[self showError:@"亲,您最多输入两位小数"];
return NO;
}
}else{
return YES;
}
}
}else{//输入的数据格式不正确
[self showError:@"亲,您输入的格式不正确"];
[textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
else
{
return YES;
}
}
所以像这种操作位数的,建议还是用range来做吧