正しい割合を入力するように求め
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (string.length > 0)
{
unichar c = [string characterAtIndex:0];
if ((c >= '0' && c <= '9') || c == '.')
{
// 数据格式正确
/*
* 首位不能是 .
* 不能00...开头
* 至多存在一个.
* 保留两位小数
*/
if ([textField.text containsString:@"."])
{
// 已存在 .
if ([string isEqualToString:@"."])
{
// 至多存在一个.
return NO;
}
else
{
// 保留两位小数
NSRange _range = [textField.text rangeOfString:@"."];
return range.location - _range.location <= 2;
}
}
else
{
// 还未输入.
if (textField.text.length == 0)
{
// 首位不能是 .
return ![string isEqualToString:@"."];
}
else
{
// 不能00...开头
NSString *regex = @"[0-9]*";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([textField.text isEqualToString:@"0"] && range.location == 1 && [predicate evaluateWithObject:string])
{
// 如果是0[0-9]开头,使用[0-9]替换
textField.text = string;
return NO;
}
else
{
// 不能大于100
int value = [textField.text stringByAppendingString:string].intValue;
return value <= 100;
}
}
}
}
else
{
// 数据格式错误
return NO;
}
}
else
{
return YES;
}
}