我想检查某个Double输入是否具有以下形式:"该数字最多有一个小数"。那么什么是好的,例如,
100 //this is ok
100.3 //this is ok
100.3 //this is ok
1.333 //this is not ok
10.333 //this is not ok
我尝试使用正则表达式,但不知怎的,它不起作用。我可以使用更简单的解决方案吗?
我已使用此代码
func validate(input: Double) -> Bool {
let regex = "^[1-9]*((\\.|,)[0-9]{1})?$"
let inputTest = NSPredicate(format: "SELF MATCHES %@", regex)
return inputTest.evaluate(with: String(input))
}
答案 0 :(得分:3)
使用正则表达式是错误的方法,因为它并不能很好地处理特定于语言环境的问题。
更好的方法是使用NumberFormatter
将字符串转换为数字。然后使用具有特定要求的其他NumberFormatter
设置将数字转换回字符串(例如最多一个十进制数字)。然后查看原始字符串和新格式化程序字符串是否匹配。
如果匹配,则用户在给定的语言环境中输入符合您所需要求的有效号码。
答案 1 :(得分:2)
试试这个正则表达式:
^\d+([.,](?!\d{3,})\d+)?$
in english:字符串的开头,后跟一个或多个数字,后跟可选的小数和更多数字,如果 3位或更多位数不跟随小数(负前瞻部分)< / p>