Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式以禁用shift、alt和ctrl键_Javascript_Regex_Keypress_Onkeydown - Fatal编程技术网

Javascript正则表达式以禁用shift、alt和ctrl键

Javascript正则表达式以禁用shift、alt和ctrl键,javascript,regex,keypress,onkeydown,Javascript,Regex,Keypress,Onkeydown,我使用下面的正则表达式来禁用除数字、逗号和点以外的所有字符 function isNumber(evt) { var theVal = $(evt).val(); var theEvent = theVal || window.event; var key = theEvent.keyCode || theEvent.which; key = String.fromCharCode(key); if (key.length == 0) return;

我使用下面的正则表达式来禁用除数字、逗号和点以外的所有字符

function isNumber(evt) {
    var theVal = $(evt).val();
    var theEvent = theVal || window.event;
    var key = theEvent.keyCode || theEvent.which;

    key = String.fromCharCode(key);

    if (key.length == 0) return;
    var regex = /^[0-9.,\b]+$/;

    if (!regex.test(key)) {
        theEvent.returnValue = false;
        if (theEvent.preventDefault) theEvent.preventDefault();
    }
}
以及HTML代码:

<input type="text" id="number" onkeydown="isNumber($(this));" />

它工作得很好,但是如果我按住Shift键,那么我就可以在框中输入字母和特殊字符,这是我不希望用户能够做到的


我需要在上面的正则表达式中添加什么才能阻止Shift、Ctrl和Alt键呢?

它不起作用的原因是因为Shift是一个向下键事件(shiftKey==true和keyCode==0),当您按下另一个键时,会触发第二个事件,这就是它显示符号的原因

如果您将事件更改为按键,它应该可以工作

此外,您根本不需要jQuery,请参见此处:


警告:人们仍然可以复制粘贴到编辑框中(除非您检查任何更改,而不仅仅是按键),因此在发送数据时确保始终验证服务器端!任何人都可以轻松地按F12键并使用开发工具强制进行更改。

它不起作用的原因是SHIFT是一个向下键事件(shiftKey==true和keyCode==0),当您按另一个键时,会触发第二个事件,这就是它显示符号的原因

如果您将事件更改为按键,它应该可以工作

此外,您根本不需要jQuery,请参见此处:


警告:人们仍然可以复制粘贴到编辑框中(除非您检查任何更改,而不仅仅是按键),因此在发送数据时确保始终验证服务器端!任何人都可以轻松地按F12键并使用开发工具强制进行更改。

在这种情况下,你有没有一个很好的理由不像任何理智的开发人员所想的那样使用
?你会惊讶地发现,实现你想要的东西是多么复杂。与其重新发明轮子,我建议使用一个现有的插件,它已经涵盖了你将遇到的所有边缘情况:为什么
isNumber($(这个))和非
isNumber(事件)?在这种情况下,你有没有一个很好的理由不像任何理智的开发人员那样使用
?你会惊讶地发现实现你想要的东西是多么复杂。与其重新发明轮子,我建议使用一个现有的插件,它已经涵盖了你将遇到的所有边缘情况:为什么
isNumber($(这个))和非
isNumber(事件)?我发现这是准确的我发现这是准确的