15

我需要创建一个函数来允许数字点和逗号。所以任何人都更正了以下功能

function on(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /[0-9]|\./;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}
4

6 回答 6

46

首先,您的正则表达式当前不允许逗号,这是您的要求。

其次,您没有使用任何量词,因此您的正则表达式将仅匹配单个字符 - of[0-9]dot. 您需要使用量词。

第三,pipe您只能移动字符类中的所有字符,而不是使用 。

尝试使用以下正则表达式:

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

量词+用于匹配模式的 1 次或多次出现。
^$锚点分别匹配字符串的开头和结尾。

于 2013-08-03T12:57:05.770 回答
7

不需要 JavaScript:

<input type="text" pattern="[0-9.,]+" title="Please enter a valid decimal number." />

现代浏览器将完美地处理这个问题。

如果你想特别允许逗号作为千位分隔符和一个小数点,试试这个:

... pattern="\d{1,2}(,\d{3})*(\.\d+)?" ...

请注意,我坚决反对阻止用户输入。他们应该能够输入他们想要的内容,然后告诉他们是否输入了无效的内容。

于 2013-08-03T13:03:35.620 回答
6

在我看来,这是最好的解决方案,涵盖更多输入情况并允许浮动。

     $( ".numerical" ).on('input', function() { 
                var value=$(this).val().replace(/[^0-9.,]*/g, '');
                value=value.replace(/\.{2,}/g, '.');
                value=value.replace(/\.,/g, ',');
                value=value.replace(/\,\./g, ',');
                value=value.replace(/\,{2,}/g, ',');
                value=value.replace(/\.[0-9]+\./g, '.');
                $(this).val(value)

        });
于 2013-11-13T23:17:23.510 回答
6

您的正则表达式不正确。

var regex = /^[0-9.,]+$/;

正则表达式 javascript,为什么点和逗号匹配 \

https://stackoverflow.com/tags/regex/info

于 2013-08-03T12:59:58.987 回答
1

有时/^[0-9.,]+$/ 不起作用如果没有,那么你可以做这样的事情:

/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/
于 2016-04-13T06:39:52.807 回答
0

我为以下格式的数字制作的正则表达式COMMA9.2

例子

  1. 1,350.88
  2. 120.00
  3. 1,500,999.24
  4. 100
  5. 10000000

正则表达式

^(\d+|\d{1,3},\d{3}|\d{1,3},\d{3},\d{3}|\d{1,3}(,\d{3})*|\d{1,3}(,\d{3})*\.\d+)$

于 2018-10-26T07:07:29.257 回答