JavaScript函数需要允许数字、小数点和逗号。

16
我需要创建一个函数,允许输入数字、小数点和逗号。请帮我修改以下函数。

我需要创建一个函数,允许输入数字、小数点和逗号。请帮我修改以下函数。

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();
  }
}
6个回答

47

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

其次,您没有使用任何量词,因此您的正则表达式只会匹配一个字符 - [0-9]dot 中的一个。 您需要使用量词。

第三,您可以将所有字符移动到字符类中而不是使用pipe

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

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

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


2
有没有办法限制只能输入一个点或一个逗号?在你的正则表达式中,12.34,45是正确的。 - Seb Gy
我假设在大多数情况下我们需要使用 /^[0-9.,]*$/ - NoWar

7

无需使用JavaScript:

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

现代浏览器可以完美处理这个问题。
如果您想特别允许逗号作为千位分隔符和一个小数点,请尝试以下操作:
... pattern="\d{1,2}(,\d{3})*(\.\d+)?" ...

请注意,我坚决反对阻止用户输入。他们应该能够输入想要的内容,并在输入无效内容后得到提示。

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)

        });


1
有时候 /^[0-9.,]+$/ 无法正常工作 如果不能,您可以尝试像这样做:
/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/

不允许使用负数。 - ncubica
这个对于小数和句点非常有效!谢谢! - Scott Yu - builds stuff

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+)$


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接