首页 > 解决方案 > 连字符分隔的浮点数的正则表达式

问题描述

在设计正则表达式以验证 Javascript 中连字符分隔的浮点数时需要一些帮助。到目前为止,我已经设法实现了这个 RegEx:

(^((\\d)+(\.[0-9]+)?)(\-)?((\\d)+(\.[0-9]+)?)$)|^(\\d+)$

它匹配以下内容:

1) 2
2) 2.10
3) 3.10-3.14

这个问题是它也匹配“3.103.310”,这是错误的数字。非常感谢解决此问题的任何帮助。

标签: javascriptregex

解决方案


问题来自第一个替代方案,它将 1 个或多个数字与可选的小数部分 ( (\d)+(\.[0-9]+)?) 匹配,然后匹配连字符,再匹配 1+ 个数字,再匹配可选的小数部分。因此,允许 2 个点。

您可以像这样修复模式:

^\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)*$

查看正则表达式演示

细节

  • ^- 字符串的开始
  • \d+- 1+ 位数
  • (?:\.\d+)?- 一个可选的非捕获组:
    • \.- 一个点
    • \d+- 1+ 位数
  • (?:-\d+(?:\.\d+)?)*- 匹配 0+ 次出现的非捕获组
    • -- 一个连字符
    • \d+(?:\.\d+)?- 1+ 位和 1 或 0 次出现.和 1+ 位
  • $- 字符串结束

推荐阅读