接受整数、小数值和最大值限制的正则表达式
Regular expression for accepting integers, decimal values and limiting by maximum value
我需要一个只接受从 1 到 9999.99 的整数或小数的正则表达式。我试过这个
^(?:[1-9][0-9]{0,4}(?:.d{1,2})?|9999|9999.99)$
但它也接受 10000。
试试这个正则表达式:
^0*(?!\.\d+)[1-9]\d{0,3}(?:\.\d{1,2})?$
解释:
^
- 匹配字符串的开头
0*
- 匹配出现 0 次以上的数字 0
(?!\.\d+)
- 如果当前位置后面没有 .
和 1+ 位数字 ,则为零长度匹配
[1-9]
- 匹配从 1 到 9 的数字
\d{0,3}
- 匹配至少 0 次或最多 3 次出现的数字
(?:\.\d{1,2})?
- 匹配小数点 .
后跟 1 或 2 位数字。末尾的 ?
使小数部分可选
$
- 匹配字符串的结尾
模式中存在一些问题:
- 这部分
[1-9][0-9]{0,4}
可以匹配1-5个数字,因为量词是0-4次所以它也可以匹配10000
- 您不需要
9999|9999.99
,因为 1-9][0-9]{0,4}
已经可以匹配它们
- 这部分
.d
匹配除换行符后跟 d
字符之外的任何字符。您必须同时转义以匹配字面上的点和单个数字
- 通过这些更改,您可以省略外部捕获组
更新后的模式如下所示:
^[1-9]\d{0,3}(?:\.\d{1,2})?$
^
字符串开头
[1-9]\d{0,3}
匹配单个数字1-9并重复0到3次数字0-9
(?:\.\d{1,2})?
可选择匹配一个 .
和 1 或 2 个数字
$
字符串结束
另一个想法,但在性能方面没有太大差异(只是为了好玩)。
^(?!0)\d{1,4}(?:\.\d\d?)?$
looakhead (?!0)
防止从零开始,所以我们可以进一步匹配 \d{1,4}
.
不遵守前导零。 See this demo at regex101.
我需要一个只接受从 1 到 9999.99 的整数或小数的正则表达式。我试过这个
^(?:[1-9][0-9]{0,4}(?:.d{1,2})?|9999|9999.99)$
但它也接受 10000。
试试这个正则表达式:
^0*(?!\.\d+)[1-9]\d{0,3}(?:\.\d{1,2})?$
解释:
^
- 匹配字符串的开头0*
- 匹配出现 0 次以上的数字0
(?!\.\d+)
- 如果当前位置后面没有.
和 1+ 位数字 ,则为零长度匹配
[1-9]
- 匹配从 1 到 9 的数字\d{0,3}
- 匹配至少 0 次或最多 3 次出现的数字(?:\.\d{1,2})?
- 匹配小数点.
后跟 1 或 2 位数字。末尾的?
使小数部分可选$
- 匹配字符串的结尾
模式中存在一些问题:
- 这部分
[1-9][0-9]{0,4}
可以匹配1-5个数字,因为量词是0-4次所以它也可以匹配10000 - 您不需要
9999|9999.99
,因为1-9][0-9]{0,4}
已经可以匹配它们
- 这部分
.d
匹配除换行符后跟d
字符之外的任何字符。您必须同时转义以匹配字面上的点和单个数字 - 通过这些更改,您可以省略外部捕获组
更新后的模式如下所示:
^[1-9]\d{0,3}(?:\.\d{1,2})?$
^
字符串开头[1-9]\d{0,3}
匹配单个数字1-9并重复0到3次数字0-9(?:\.\d{1,2})?
可选择匹配一个.
和 1 或 2 个数字$
字符串结束
另一个想法,但在性能方面没有太大差异(只是为了好玩)。
^(?!0)\d{1,4}(?:\.\d\d?)?$
looakhead (?!0)
防止从零开始,所以我们可以进一步匹配 \d{1,4}
.
不遵守前导零。 See this demo at regex101.