我需要创建一个允许数字点和逗号的函数。所以任何人都纠正了以下功能
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();
}
}
答案 0 :(得分:31)
首先,你的正则表达式目前不允许使用逗号,这是你的要求。
其次,您没有使用任何量词,因此您的正则表达式只匹配一个字符 - [0-9]
或dot
之一。你需要使用量词。
第三,不是使用pipe
,而是只能移动角色类中的所有字符。
尝试使用以下正则表达式:
/^[0-9.,]+$/
量词+
用于匹配一次或多次出现的模式
^
和$
个锚点分别匹配字符串的开头和结尾。
答案 1 :(得分:8)
不需要JavaScript:
<input type="text" pattern="[0-9.,]+" title="Please enter a valid decimal number." />
现代浏览器将完美地处理这个问题。
如果你想特别允许逗号为千位分隔符和一个小数点,试试这个:
... pattern="\d{1,2}(,\d{3})*(\.\d+)?" ...
请注意,我坚决反对阻止用户输入。他们应该能够输入他们想要的东西,然后告诉他们是否输入了无效的东西。
答案 2 :(得分:5)
在我看来,这是最好的解决方案,涵盖更多输入案例并允许浮动。
$( ".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)
});
答案 3 :(得分:4)
答案 4 :(得分:1)
有时/^[0-9.,]+$/
不起作用
如果没有,那么你可以这样做:
/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/
答案 5 :(得分:0)
我为数字编写的正则表达式遵循COMMA9.2
示例
1,350.88
120.00
1,500,999.24
100
10000000
RegEx
^(\d+|\d{1,3},\d{3}|\d{1,3},\d{3},\d{3}|\d{1,3}(,\d{3})*|\d{1,3}(,\d{3})*\.\d+)$