Jquery / Javascript用逗号,13个int位和2个小数位过滤十进制数的正则表达式

时间:2018-03-07 09:26:55

标签: javascript jquery regex

嗨我需要输入帮助。我需要制作一个在keypress上过滤它的正则表达式。

输入的数字最多为13个int位,最多2个小数位。另外,十进制数字使用逗号而不是点。

我尝试了一些正则表达式,但他们不能在按键上工作。

111111,11 TRUE
1111111111111 TRUE 
11111111111111 FALSE
11111111111111,11 FALSE
1111111111111,11 TRUE
111,111 FALSE
1a FALSE
1.0 FALSE
1.00 FALSE
0 TRUE

我尝试了以下正则表达式,并在regextester网站上进行了测试。 在该网站,它部分工作(有些情况下仍然无法正常工作),但在JavaScript上它不会过滤。我不知道原因。

/^(\d{1,13})(\,)?(\d{1,2})$/g

这是jquery方法

$(".numericWithDecimal").on("keypress keyup blur",function (event) {
    var regex = /^(\d{1,13})(\,)?(\d{1,2})$/g;

   //I tried this
   if(!regex.match($(this).val()))
     event.preventDefault();

   //or this
   if (!regex.test($(this).val()))
     event.preventDefault();

});

是否可以创建一个适用于这些情况的表达式?是什么?

[编辑]基于@The第四只鸟正则表达式的新方法

 $(".numericWithDecimalLimit").on("keypress keyup blur",function (event) {
         var regex = /^(?:\d{1,13})(?:,\d{1,2})?$/g;
         var value = this.value + String.fromCharCode(event.keyCode || event.charCode);     
         if(!regex.test(value))
             event.preventDefault();    
     });

2 个答案:

答案 0 :(得分:0)

您可以将正则表达式更新为并将逗号包含在非捕获组中并使其成为可选项:

^(\d{1,13})(?:,\d{1,2})?$

那将匹配:

  • ^字符串的开头
  • (\d{1,13})在组中捕获1 - 13位数
  • (?:非捕获组
    • ,匹配逗号
    • \d{1,2}匹配1或2位数字
  • )?关闭非捕获组并将其设为可选
  • $字符串结尾

对于匹配,您还可以将第一个组设为非捕获组:

^(?:\d{1,13})(?:,\d{1,2})?$

答案 1 :(得分:0)

在您的原始正则表达式中进行小幅更新以包含点后,似乎对我有效。我最终得到了这个/^(\d{1,13})(,|\.)?(\d{1,2})$/g

以下是一些测试用例:



var regex = /^(\d{1,13})(,|\.)?(\d{1,2})$/g;

console.log(regex.test('111111.11'));

console.log(regex.test('1111111111111'));

console.log(regex.test('11111111111111'));

console.log(regex.test('11111111111111,11'));

console.log(regex.test('1111111111111,11'));

console.log(regex.test('111,111'));

console.log(regex.test('1a'));

console.log(regex.test('1.0'));

console.log(regex.test('1.00'));

console.log(regex.test('0'));