我对iPhone开发还比较新,有一个看起来很简单的问题我无法解决。如何验证用户在文本框中输入了数字和小数?我尝试了很多不同的方法,但最接近的只允许形式为5.34或23.89的数字字符串。我需要它允许像0.50或432.30这样的数字,只要最后一个输入值是零即可。我尝试通过将其转换为浮点数然后再转换回字符串来检查字符串输入,但得到了上述结果。任何帮助都将非常感激(包括示例代码!)谢谢!
我有类似的需求,解决方案最终证明是相当平凡的。不幸的是,许多与此问题相关的问题和回答都是关于验证或格式化数值,而不是控制用户输入。
以下实现shouldChangeCharactersInRange委托方法是我的解决方案。像往常一样,在这种情况下,RegularExpressions非常好用。RegExLib.com是一个非常好用的有用RegEx来源。我不是RegEx大师,总是有点难以组合它们,因此欢迎任何改进建议。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == self.quantityTextField)
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
options:NSRegularExpressionCaseInsensitive
error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
options:0
range:NSMakeRange(0, [newString length])];
if (numberOfMatches == 0)
return NO;
}
return YES;
}
以上代码允许用户输入以下类型的值:1、1.1、1.11、.1、.11
float myFloat = [myTextField floatValue];
NSString *formatString = [NSString stringWithFormat:@"%%1.%if", 2]; //2 decimals after point
NSString *resultString = [NSString stringWithFormat:formatString, myFloat];
textField:shouldChangeCharactersInRange:replacementString:
检查用户最后按下的键。您只需将其与数字值或点/逗号进行比较即可知道。