我希望允许用户输入数字,小数点前最多3位数,可选的小数位数和可选的小数位后最多2位数。
我希望它匹配:12,123,123.5,123.55,123。 我不希望它匹配:abc,1234,123.555
到目前为止我有什么: ^ \ d {0,3}(?)\ d {0,2} $
目前它仍然匹配1234.我想我需要以某种方式使用后面的运算符,但我不确定如何。
由于
答案 0 :(得分:3)
试试这个:
^\d{0,3}(?:\.\d{0,2})?$
或者更好,只避免.
:
^(?:\d{1,3}(?:\.\d{0,2})?|\.\d{1,2})$
具体来说,请注意:
^\d{0,3}(\.?)\d{0,2}$
也不正确。如果点为可选,则可以匹配12378
:\d{0,3}
匹配123
,(\.?)
与任何内容不匹配,\d{0,2}
匹配78
。 答案 1 :(得分:1)
也许这(未经测试)
^(?=.*\d)\d{0,3}\.?(?<=\.)\d{0,2}$
编辑 - 以上是错误的。
@Kobi的回答是正确的。
可以在他的第一个版本中添加一个预测,以确保不只是一个点或空字符串。
^(?=.*\d)\d{0,3}(?:\.\d{0,2})?$
答案 2 :(得分:1)
这个怎么样?
/^\d{0,2}(?:\d\.|\.\d|\d\.\d)?\d?$/
答案 3 :(得分:0)
您必须将小数点和小数的组合设为可选。在正则表达式中,只有十进制数是可选的。因为123满足^ \ d {0,3},不存在小数点满足(。?),并且4满足\ d {0,2},所以接受1234。
Kobi的回答为您提供了正确的正则表达式。