regex - 正则表达式范围太大
问题描述
我创建了一个(大部分)工作正则表达式,它接受任何大于 0 或 <= 12 的数字,最多允许两位小数。问题是它还接受 12-13 之间的数字,例如 12.25,以及 0。
我的正则表达式模式是/^\b(0*([0-9]|1[0-2]))\b\.?[0-9]{0,2}$/
如何更改此设置以防止 0 或大于 12 的数字被接受?
解决方案
您可以使用
^(?=[^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])
- 在除数字 from to之外的任何字符之后需要一个非零数字(从1
to的数字)的正向前瞻9
1
9
0*
- 任何 0+ 前导零(?:
- 非捕获组的开始:(?:\d|1[01])?(?:\.[0-9]{1,2})?
-0
到11
数字(可选匹配,参见?
第一个右括号后的),后跟可选的.
1 到 2 位数字序列|
- 或者12(?:\.0{1,2})?
-12
可选后跟.
1 到 2 位数字
)
- 非捕获组的结束$
- 字符串结束
推荐阅读
- sympy - 如何在 sympy 中删除下标?
- php - MySQL 加入组
- r - 如何在 y 轴上重新排序时间,使午夜位于中心
- php - Very confusing issue with date and strtotime
- npm - Using the resulting object from require call in ClojureScript?
- python - Trying to obtain the title of a website that is generated through javascript
- sql - 触发 SQL:在连接到另一个表的表中插入或更新
- amazon-redshift - 使用 Redshift Spectrum 读取 AWS Redshift 外部表中的数据
- node.js - 如何在 NodeJS/Express 服务器上使用 Postgres 池
- json - 1 large json file to many individual markdown files