首页 > 解决方案 > 正则表达式范围太大

问题描述

我创建了一个(大部分)工作正则表达式,它接受任何大于 0 或 <= 12 的数字,最多允许两位小数。问题是它还接受 12-13 之间的数字,例如 12.25,以及 0。

我的正则表达式模式是/^\b(0*([0-9]|1[0-2]))\b\.?[0-9]{0,2}$/

如何更改此设置以防止 0 或大于 12 的数字被接受?

标签: regexfloating-pointinteger

解决方案


您可以使用

^(?=[^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之外的任何字符之后需要一个非零数字(从1to的数字)的正向前瞻919
  • 0*- 任何 0+ 前导零
  • (?:- 非捕获组的开始:
    • (?:\d|1[01])?(?:\.[0-9]{1,2})?-011数字(可选匹配,参见?第一个右括号后的),后跟可选的.1 到 2 位数字序列
    • |- 或者
    • 12(?:\.0{1,2})?-12可选后跟.1 到 2 位数字
  • )- 非捕获组的结束
  • $- 字符串结束

推荐阅读