2013-08-03 42 views
3

函数需要允许数字点和逗号。所以任何人都可以修复我的正则表达式变量?谢谢。 :)功能:Javascript函数需要允许数字,点和逗号

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(); 
    } 
} 

回答

19

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

其次,你还没有使用任何量词,所以你的正则表达式将只匹配一个字符 - [0-9]dot之一。你需要使用量词。

第三,不是使用pipe,而是只能移动字符类中的所有字符。使用下面的正则表达式

尝试:

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

量词+用于匹配的图案的1个或多个发生。
^ and $ anchor分别匹配字符串的开头和结尾。

+1

有没有办法来限制只有一个点或一个逗号?在你的正则表达式中,12.34,45是正确的 –

7

无需JavaScript的:

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

现代浏览器会完全处理这个问题。

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

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

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

2

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

 $(".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) 

     }); 
0

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

/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/ 
+0

这不允许使用负数。 – ncubica

相关问题