正则表达式匹配,需要匹配两个数字

时间:2016-07-12 12:07:39

标签: php regex

如何匹配号码123,340.00和1.9e10? 我试过正则表达式如下

^-?\d+(,)*(\d+\.(\d+e?))

但它只匹配123,340.00,我希望匹配这两个数字。任何的想法?请。

注意:我尝试过在线正则表达式工具https://regex101.com

3 个答案:

答案 0 :(得分:1)

您应该至少在e之后允许一些数字。此外,,*匹配零个或多个逗号,我认为您应该只允许使用逗号+数字组。

我建议使用

'~^-?\d+(?:,\d+)*(?:\.\d+)?(?:e[+-]?\d+)?$~i'

请参阅regex demo

模式说明

  • ^ - 开始刺痛
  • -? - 可选的-(您可以使用[-+]?来匹配加号或减号)
  • \d+ - 一位或多位
  • (?:,\d+)* - 逗号的零个或多个序列+ 1个或更多个数字
  • (?:\.\d+)? - 可选的小数部分,一个点和1+位数
  • (?:e[+-]?\d+)? - 可选的指数部分,e,可选的减号或加号,以及1+位数
  • $ - 字符串结束。

请注意,~i修饰符用于匹配eE

答案 1 :(得分:0)

稍微复杂一点:

^-?\d+(,\d+)*(\.\d+(e\d+)?)?$

答案 2 :(得分:0)

如果您正在寻找非常严格的东西,可以使用:

^-?[1-9](?:(?:\.[0-9]*[1-9])?[eE][+-]?[1-9][0-9]*|[0-9]{0,2}(?:,[0-9]{3})*(?:\.[0-9]+)?)$

它有点长但是当数字有:

时它不匹配
012          # leading zeroes
1.20e5       # trailing zeroes in scientific notation
12.3e4       # more that one digit before the dot
1.2e0        # a zero as exponent
1,2345,678,9 # a crazy digit separator