【问题标题】:How to make this regex accept decimals also如何使这个正则表达式也接受小数
【发布时间】:2026-02-14 16:30:01
【问题描述】:

我有一个像这样的正则表达式

/^[0-9]*\s*kg\s*[0-9]*$/

这接受像100 kg100kg 这样的字符串。我想让它也接受100.1kg100.1 kg10,20 kg 等等(点和小数都应该接受)。如何更改当前的正则表达式,以便我提到的那些数字也测试为真?我见过这个支持数字和小数的正则表达式,但我不确定如何将它与我的正则表达式结合起来。

^[0-9]{1,2}([,.][0-9]{1,2})?$

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    要使其成为可选,您可以使用可选的非捕获组 (?: 并在其后添加匹配的 0+ 次空格:

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

    Regex demo

    现在它会匹配

    • ^ 字符串开头
    • [0-9]+ 1+ 位
    • (?:非捕获组
      • [,.][0-9]+ 匹配逗号或点和 1 个以上数字
    • )?关闭非捕获组并使其可选
    • \s*kg 匹配 0+ 次空白字符
    • $ 字符串结束

    【讨论】:

      【解决方案2】:

      除了整数值之外,还可以选择性地合并十进制值,您可以将此正则表达式 (?:[.,]\d+)? 放在 ^[0-9]* 之后,这将允许它支持您在帖子中提到的十进制值。整体正则表达式变成了这样,

      ^\d*(?:[.,]\d+)?\s*kg\s*$
      

      Demo

      【讨论】: