【问题标题】:Regex expression for numbers with commas and optional .00带有逗号和可选 .00 的数字的正则表达式
【发布时间】:2017-04-09 13:14:18
【问题描述】:

我想为数字输入制作一个正则表达式模式。当用户输入数字时,逗号会自动分隔输入的数字,例如 1,424 或 23,232。这适用于正则表达式模式

/^[0-9.,]*$/

但问题是这种模式允许在数字之间使用点(.)。我想制作正则表达式,就像输入可以允许 .00 吃数字的结尾而不是数字之间的一样。但 .00 也是可选的。 允许的数字格式如下:

123312131256457.00
1233121312564
9,223,372

不允许的数字格式如下:

34.343455.3434
34353... 

我浪费了很多时间,但没有得到任何解决方案。请分享你的想法。提前致谢。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    试试这个正则表达式:

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

    这里是一个简单的解释:

    ^              from the start
    [0-9]{1,3}     match 1 to 3 numbers
    (,[0-9]{3})*   followed by a comma and three numbers, any number of times
    ([0-9])*       OR just followed any amount of numbers, with NO commas
    (\.[0-9]{2})?  followed by an optional decimal point and two zeroes
    $              end
    

    演示在这里:

    Regex101

    【讨论】:

    【解决方案2】:

    非常非常简单的答案是/^[0-9,]*(\.00)?$/。即,添加一个可选的.00 后缀,在可选部分之前删除对. 文字的支持。


    如上所述,您可以选择更花哨的东西:^(0|[1-9]\d{0,2}(,?\d{3})*)(\.00)?$

    这将与注释一样:

    0 // OK
    01 // Not OK, must start with 1-9 if not 0 or 0.00
    1,1,1.00 // Not OK, groups must be 3 digits, if used
    0,000.00 // Not OK, should be 0.00
    1,000 // OK
    123312131256457.00 // OK, groups are optional
    1233121312564 // OK, decimals (.00) are optional
    9,223,372 // OK
    

    【讨论】:

    • 它会匹配 123,456789.00 之类的东西,即匹配逗号模式中断的数字。
    • @TimBiegeleisen 没错,它允许省略逗号。
    【解决方案3】:

    有点像

    /^[0-9,]*(?:\.0+)?$/
    

    [0-9,]* 也允许使用 "3,,,"

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多