首先,我设置UITextField的键盘以使用带小数风格的数字.所以用户只能输入数字和一个小数.
我想做的是测试用户输入的输入,并防止输入多个小数,并将数字的小数部分限制在两个位置.我不想舍弃数字,也不想把输入视为一个数字.我只想阻止用户输入小数点右边的两位数字.
解决方法
解决方案最终变得相当微不足道.不幸的是,与此问题相关的许多问题和答案都是验证或格式化数值,而不是控制用户可以输入的内容.
以下实现的shouldChangeCharactersInRange代理方法是我的解决方案.与往常一样,正则表达式在这种情况下摇滚. 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})?)?$"; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:nil]; 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.请注意,此实现不会替换文本字段的字符串,这将导致递归.如果’newString’与正则表达式不匹配,则此解决方案只会拒绝用户输入的下一个字符.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。