浮点数的Reg exp

时间:2019-07-11 15:24:17

标签: regex

我需要一个符合以下模式的reg exp:

  1. 可以以点或数字(。,。1,.1,.1、1、1。,1.1)开头和结尾
  2. 两个数字(1.1)之间只能有一个点
  3. 此外,点不是强制性的(123)

我尝试使用(^[\d.\]?|[0-9]*\.|[0-9]+|[0-9]+),但没有用。 它匹配n个点,但不匹配点后的数字

3 个答案:

答案 0 :(得分:1)

这是接受验证

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

扩展

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

这是按键后的验证

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

答案 1 :(得分:0)

您获得了所有匹配项,因为您使用了3个交替(最后2个相同[0-9]+

交替的第一部分断言字符串^的开始,实际上是一个字符类^[.\]?|[0-9]*,它与列出的任何字符.]?|或范围0匹配重复0+次-9。

此后,它需要匹配一个点,该点是字符串中的最后一个点,因为它也可以在字符类中匹配。然后其他交替匹配末尾的任何数字。

如果支持正向先行并且不允许空匹配,则可以使用正向先行检查是否存在至少一个数字或点。

然后匹配一个可选点,然后使用循环模式匹配1个以上的数字,然后匹配一个可选点。

^(?=[.\d])\.?(?:\d+\.?)*$
  • ^字符串的开头
  • (?=[.\d])声明点或数字
  • \.?匹配可选点
  • (?:\d+\.?)*重复0+次,匹配1+个数字和一个可选的点
  • $字符串结尾

Regex demo

答案 2 :(得分:0)

我使用了此正则表达式:

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

我的想法是:

  • 匹配字符串开头的所有数字。
  • 匹配第一个点。
  • 从现在开始,必须在新的点(\ d + \。)*之前至少匹配一位数字。
  • 上面列出的步骤都是可选的。
  • 最后,匹配任意数量的数字\ d *。
  • 使用^和$防止字符串中出现中间匹配项。