确保输入Double具有特定格式

时间:2016-12-05 18:50:33

标签: ios regex swift swift3 decimal

我想检查某个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))
}

2 个答案:

答案 0 :(得分:3)

使用正则表达式是错误的方法,因为它并不能很好地处理特定于语言环境的问题。

更好的方法是使用NumberFormatter将字符串转换为数字。然后使用具有特定要求的其他NumberFormatter设置将数字转换回字符串(例如最多一个十进制数字)。然后查看原始字符串和新格式化程序字符串是否匹配。

如果匹配,则用户在给定的语言环境中输入符合您所需要求的有效号码。

答案 1 :(得分:2)

试试这个正则表达式:

^\d+([.,](?!\d{3,})\d+)?$

in english:字符串的开头,后跟一个或多个数字,后跟可选的小数和更多数字,如果 3位或更多位数不跟随小数(负前瞻部分)< / p>

demo