连字符分隔的浮点数的正则表达式

时间:2018-11-26 08:14:29

标签: javascript regex

在设计正则表达式以验证Java语言中连字符分隔的浮点数方面需要一些帮助。到目前为止,我已经成功实现了此RegEx:

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

它符合以下条件:

1) 2
2) 2.10
3) 3.10-3.14

此问题在于它还匹配错误的数字“ 3.103.310”。非常感谢您为解决此问题提供的帮助。

1 个答案:

答案 0 :(得分:2)

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

您可以这样修改模式:

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

请参见regex demo

详细信息

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