我希望允许用户输入数字,小数点前最多 3 位数字,可选小数位,可选小数位后最多 2 位数字。
我希望它匹配:12、123、123.5、123.55、123。 我不希望它匹配:abc, 1234, 123.555
到目前为止我所拥有的: ^\d{0,3}(.?)\d{0,2}$
目前它仍然匹配 1234。我想我需要以某种方式使用后视运算符,但我不确定如何使用。
谢谢
最佳答案
试试这个:
^\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
。
关于regex - 文本输入的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5415216/