正则表达式的数值;最多3位小数

时间:2015-02-26 11:57:44

标签: javascript regex validation

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

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

我已经使用HTML5-Patterns使用它了:

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

4 个答案:

答案 0 :(得分:2)

您需要使用^启动正则表达式并以$结束,以确保整个输入字符串/行匹配。

/^\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

答案 1 :(得分:0)

您可以使用此正则表达式:

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

RegEx Demo

答案 2 :(得分:0)

您可以使用RegExp对象。

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

执行后,res将为true,因为str匹配您正在寻找的模式,

答案 3 :(得分:0)

试试这个表达式:

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

有效示例:

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