【问题标题】:regular expression for numeric value; at most 3 decimal places数值的正则表达式;最多 3 位小数
【发布时间】:2015-02-26 11:57:44
【问题描述】:

我正在尝试使用正则表达式验证表单,条件是:

  • 必须是数值
  • 最多可以有三位小数(0,1,2 也可以)
  • 必须用逗号(,)隔开

我已经使用 HTML5 模式让它工作了:

pattern='\d+(,\d{1,3})?'

由于 IE9 不支持模式,所以我尝试使用 js:

var numPattern = /\d+(,\d{1,3})?/;
if(!numPattern.test(menge.val()))
{
    checkvalidate = false;
}

我哪里做错了?

示例 有效:1,234; 2,00 ; 5; 0,1 无效:1,2345; 2.00 ; 56a

【问题讨论】:

  • 发布一些有效和无效的例子。
  • 如果您正在验证,您可能需要在表达式的开头添加 ^ 并在表达式的末尾添加 $ 以匹配整个字符串。

标签: javascript regex validation


【解决方案1】:

您需要以^ 开始您的正则表达式,并以$ 结束它,以确保匹配整个输入字符串/行。

/^\d+(,\d{1,3})?$/

这是一个“演示”,其中您的所有示例都是有效/无效的:

https://regex101.com/r/oP5yJ4/1

(使用 regex101.com 调试您的正则表达式模式通常非常有用)

注意:(没有^$

    var pattern_without = /\d+(,\d{1,3})?/;
    pattern_without.test("56a") === true; // matches, but only "56"
    pattern_without.test("1,2345") === true; // matches, but only "1,234"

但是:(^$

    var pattern_with = /^\d+(,\d{1,3})?$/;
    pattern_with.test("56a") === false; // no match
    pattern_with.test("1,2345") === false; // no match

【讨论】:

    【解决方案2】:

    你可以使用这个正则表达式:

    /^\d+(?:,\d{1,3})*$/
    

    RegEx Demo

    【讨论】:

      【解决方案3】:

      试试这个表达式:

      \d+(,\d{3})*([.]\d{1,3})?
      

      有效例子:

      1,200.123
      1,200.12
      1,200.1
      1.123
      1,200,222
      1,200,002
      

      【讨论】:

        【解决方案4】:

        您可以使用 RegExp 对象。

        var str = "123545,123";
        var patt = new RegExp("/^(?:\d*\,\d{1,3}|\d+)$/");
        var res = patt.test(str);
        

        执行后, res 将为真,因为 str 匹配您要查找的模式,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多