我创建了一个(通常)工作的正则表达式,该表达式可以接受任何大于0或小于等于12的数字,最多允许两位小数。问题在于它还接受12-13之间的数字,例如12.25,也可以是0。
我的正则表达式模式为/^\b(0*([0-9]|1[0-2]))\b\.?[0-9]{0,2}$/
如何更改此设置以防止0或大于12的数字被接受?
答案 0 :(得分:2)
您可以使用
^(?=[^1-9]*[1-9])0*(?:(?:\d|1[01])?(?:\.[0-9]{0,2})?|12(?:\.0{0,2})?)$
如果要求小数点分隔符后面的数字,请用{0,2}
替换{1,2}
:
^(?=[^1-9]*[1-9])0*(?:(?:\d|1[01])?(?:\.[0-9]{1,2})?|12(?:\.0{1,2})?)$
详细信息
^
-字符串的开头(?=[^1-9]*[1-9])
-一个正向的超前查询,除了从1
到{{的数字之外,其他任何字符都需要一个字符,它需要一个非零数字(从9
到1
的数字)。 1}} 9
-任何0+前导零0*
-一个非捕获组的开始:
(?:
-(?:\d|1[01])?(?:\.[0-9]{1,2})?
至0
个数字(可选,在第一个右括号后进行匹配,请参见11
),后跟一个可选序列?
和1至2位数字.
-或|
-12(?:\.0{1,2})?
后跟12
和1到2位数字.
-非捕获组的结尾)
-字符串结尾