我需要为以下场景创建一个正则表达式。
它只能有数字,只能有一个点或逗号。
第一部分可以有一到三个数字。 第二部分可以是点或逗号。 第三部分可以有一到两位数字。
有效方案是
123,12
123.12
123,1
123
12,12
12.12
1,12
1.12
1,1
1.1
1
到目前为止我用这个表达式
来了\d{1,3}(?:[.,]\d{1,2})?
但效果不佳。例如,输入为11:11被标记为有效。
答案 0 :(得分:5)
您需要在表达式周围添加anchors:
^\d{1,3}(?:[.,]\d{1,2})?$
^
将匹配字符串的开头
$
将匹配字符串
如果缺少这些锚点,它将在你的字符串上部分匹配,因为最后一部分是可选的,意思是“11:11”它可以匹配冒号前的数字,第二个匹配将位于数字之后结肠。
答案 1 :(得分:2)
尝试使用^
和$
:
^\d{1,3}(?:[.,]\d{1,2})?$
^
匹配必须从字符串或行的开头开始。
$
匹配必须发生在字符串的末尾,或者在行或字符串末尾的\n
之前。