正则表达式匹配数字的科学记数法,但不匹配其他字母



我想写一个正则表达式来匹配所有正双数,小数点后最多 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/

相关内容

  • 没有找到相关文章

最新更新