【发布时间】:2019-06-10 12:50:17
【问题描述】:
我创建了一个(大部分)有效的正则表达式,它接受任何大于 0 或
我的正则表达式模式是/^\b(0*([0-9]|1[0-2]))\b\.?[0-9]{0,2}$/
如何更改此设置以防止 0 或大于 12 的数字被接受?
【问题讨论】:
-
你必须对
12进行特殊处理,然后你可以将[0-2]改为[0-1]。
标签: regex floating-point integer
我创建了一个(大部分)有效的正则表达式,它接受任何大于 0 或
我的正则表达式模式是/^\b(0*([0-9]|1[0-2]))\b\.?[0-9]{0,2}$/
如何更改此设置以防止 0 或大于 12 的数字被接受?
【问题讨论】:
12进行特殊处理,然后你可以将[0-2] 改为[0-1]。
标签: regex floating-point integer
你可以使用
^(?=[^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 到9 的数字之外的任何字符之后
0* - 任何 0+ 个前导零(?: - 非捕获组的开始:
(?:\d|1[01])?(?:\.[0-9]{1,2})? - 0 到 11 数字(可选匹配,参见第一个右括号后的 ?)后跟可选的 . 序列和 1 到 2 位数字| - 或 12(?:\.0{1,2})? - 12 可选后跟 . 和 1 到 2 位数字) - 非捕获组结束$ - 字符串结束【讨论】:
[0-9] 替换为 [1-9]。我更新了所有的演示和解释。
^(?=[^1-9]*[1-9])0*(?:(?:\d|1[01])?(?:\.[0-9]{0,2})?|12(?:\.0{0,2})?)$,见regex101.com/r/WBwDeA/4