我想写一个正则表达式来匹配所有正双数,小数点后最多 2 位。
我的第一个方法是这样的:
^\d+(?:\.\d{1,2})?$
它在大多数情况下都有效,但不适用于科学记数法,例如10000000
当它写成1.0E7
时。
我在这里找到了一个答案,并根据我的情况对其进行了调整,结果是:
[\s=]+([+]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d{1,2}))$
但现在它为许多"好"值返回 false。
知道如何使其仅匹配小数点后 0 到 2 位数字的正数值以及数字的科学记数法吗?
您从另一个答案中复制了确切的正则表达式,该答案要求更多要求,即匹配方程。通过一些修改删除那些,你可以尝试:
^[+-]?d+(?:.d*(?:[eE][+-]?d+)?)?$
现场演示
假设零不是正数,您可以使用
^(?:0.(?:0[1-9]|[1-9]d?)|[1-9]d*(?:.d{1,2})?)(?:e[+-]?d+)?$
哪里
(?:0.(?:0[1-9]|[1-9]d?)
匹配小于 1 且最多 2 位小数的正数[1-9]d*(?:.d{1,2})?
匹配等于或大于 1 的正数,最多 2 位小数(?:e[+-]?d+)?
可选择匹配科学记数法
警告:
- 不允许使用前导零
- 不允许使用没有小数位的
.
(可以使用.d{0,2}
修复( - 由于电子符号,可以有更多的小数位(例如1E-3(
- 应使用 i-修饰符
- 您可能只想使用您的语言功能来解析和比较浮点值
演示:https://regex101.com/r/ljOaIb/1/