-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if ([_textField.text rangeOfString:@"."].location==NSNotFound) {
isHaveDian=NO;
}
if ([string length]>0)
{
unichar single=[string characterAtIndex:0];//当前输入的字符
if ((single >='0' && single<='9') || single=='.')//数据格式正确
{
//首字母不能为0和小数点
if([_textField.text length]==0){
if(single == '.'){
// [self alertView:@"亲,第一个数字不能为小数点"];
// NSLog(@"亲,第一个数字不能为小数点");
// [CNHUD showHUD:@"亲,第一个数字不能为小数点" duration:1.5];
[_textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
// if (single == '0') {
[self alertView:@"亲,第一个数字不能为0"];
NSLog(@"亲,第一个数字不能为0");
// [CNHUD showHUD:@"亲,第一个数字不能为0" duration:1.5];
// [_textField.text stringByReplacingCharactersInRange:range withString:@""];
// return YES;
//
// }
}
if (single=='.')
{
if(!isHaveDian)//text中还没有小数点
{
isHaveDian=YES;
return YES;
}else
{
// [self alertView:@"亲,您已经输入过小数点了"];
// NSLog(@"亲,您已经输入过小数点了");
// [CNHUD showHUD:@"亲,您已经输入过小数点了" duration:1.5];
[_textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
else
{
if (isHaveDian)//存在小数点
{
//判断小数点的位数
NSRange ran=[_textField.text rangeOfString:@"."];
int tt=range.location-ran.location;
if (tt <= 2){
return YES;
}else{
// [self alertView:@"亲,您最多输入两位小数"];
// [CNHUD showHUD:@"亲,您最多输入两位小数" duration:1.5];
// NSLog(@"亲,您最多输入两位小数");
return NO;
}
}
else
{
return YES;
}
}
}else{//输入的数据格式不正确
// [self alertView:@"亲,您输入的格式不正确"];
// NSLog(@"亲,您输入的格式不正确");
// [CNHUD showHUD:@"亲,您输入的格式不正确" duration:1.5];
[_textField.text stringByReplacingCharactersInRange:range withString:@""];
return NO;
}
}
else
{
return YES;
}
}
【Swift】
/// 只能输入数字和小数点
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let scanner = Scanner(string: string)
let numbers : NSCharacterSet
let pointRange = (textField.text! as NSString).range(of: ".")
if (pointRange.length > 0) && pointRange.length < range.location || pointRange.location > range.location + range.length {
numbers = NSCharacterSet(charactersIn: "0123456789.")
}else{
numbers = NSCharacterSet(charactersIn: "0123456789.")
}
if textField.text == "" && string == "." {
return false
}
let remain = 2
let tempStr = textField.text!.appending(string)
let strlen = tempStr.length
if pointRange.length > 0 && pointRange.location > 0{//判断输入框内是否含有“.”。
if string == "." {
return false
}
if strlen > 0 && (strlen - pointRange.location) > remain + 1 {//当输入框内已经含有“.”,当字符串长度减去小数点前面的字符串长度大于需要要保留的小数点位数,则视当次输入无效。
return false
}
}
let zeroRange = (textField.text! as NSString).range(of: "0")
if zeroRange.length == 1 && zeroRange.location == 0 { //判断输入框第一个字符是否为“0”
if !(string == "0") && !(string == ".") && textField.text?.length == 1 {//当输入框只有一个字符并且字符为“0”时,再输入不为“0”或者“.”的字符时,则将此输入替换输入框的这唯一字符。
textField.text = string
return false
}else {
if pointRange.length == 0 && pointRange.location > 0 {//当输入框第一个字符为“0”时,并且没有“.”字符时,如果当此输入的字符为“0”,则视当此输入无效。
if string == "0" {
return false
}
}
}
}
// let buffer : NSString!
if !scanner.scanCharacters(from: numbers as CharacterSet, into: nil) && string.length != 0 {
return false
}
return true
}