Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 在keypress上检查正则表达式_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 在keypress上检查正则表达式

Javascript 在keypress上检查正则表达式,javascript,jquery,regex,Javascript,Jquery,Regex,我想创建我自己的插件(不使用任何外部库-用于学习目的)来验证用户在regex测试函数中动态键入的文本 在示例中,我使用正则表达式模式: ^.{2}$ 和javascript函数 $('#textbox').bind("keypress", function (event) { var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); if (!regex.test(key)) {

我想创建我自己的插件(不使用任何外部库-用于学习目的)来验证用户在regex测试函数中动态键入的文本

在示例中,我使用正则表达式模式:

^.{2}$

和javascript函数

$('#textbox').bind("keypress", function (event) {
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
        event.preventDefault();
        return false;
    }
});
现在,我想在文本框中键入两个点,但在第一次按下键盘后,一个点与模式不匹配,因为事件被阻止,所以什么也没有发生


我的问题:是否可以检查当前键入的文本是否与正则表达式模式匹配

您可以尝试使用keydown,因为在文本框中显示字符之前,只要按一个键,它就会触发。因此,如果它与模式不匹配,您可以返回。

您的正则表达式只接受两个点(..),但您正在测试单个字符

var regex = new RegExp("^.{2}$");

$('#textbox').bind("keypress", function (event) {
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
        event.preventDefault();
        return false;
    }
});
要在用户完成键入时检查当前键入的文本吗。。看

因此,本质上应该使用onkeyup,并且应该检查整个用户输入,而不仅仅是最后一个键

var alpha = /[ A-Za-z]/;
var numeric = /[0-9]/; 
var alphanumeric = /[ A-Za-z0-9]/;

function validateKeypress(validChars) {
    var keyChar = String.fromCharCode(event.which || event.keyCode);
    return validChars.test(keyChar) ? keyChar : false;
}
HTML必须更改为onkeypress=“validateKeypress(alpha);”

注意:使用/pattern/ig更改/a/i。它只检查输入是否正确 a/a


假设您的意思是要测试输入的当前值,而不仅仅是键入的最后一个字符,您可以使用
$(this.val()
this.value
来检索它。
onkeyup()
事件就是您要查找的?-->@RoryMcCrossan是的,你是对的,但这仍然不能改变事实,第一个键入的点在键入后与正则表达式不匹配。@Baldráni同上是的,我测试单个字符,但这是我的观点,我需要如何在按下键后检查这个正则表达式片段?在第一次按键事件后,文本框值将为“.”,它与正则表达式完全不匹配,就像其他答案一样。按键或按键在这里是不相关的。因此,您的用户按下,然后输入值被清除,然后您应该检查他是否按下。再来一次?那么我想你应该把“.”的状态保存下来,在某个地方按过一次
var alpha = /[ A-Za-z]/;
var numeric = /[0-9]/; 
var alphanumeric = /[ A-Za-z0-9]/;

function validateKeypress(validChars) {
    var keyChar = String.fromCharCode(event.which || event.keyCode);
    return validChars.test(keyChar) ? keyChar : false;
}
var in_put = document.getElementById("in_put"),
key = null;

in_put.addEventListener("keydown", match_input);

function match_input(e){

    console.log("Key: "+e.key);
    key = e.key;
    console.log("Match: "+key.match(/a/i));//return array of match
    if(key.match(/a/i)){

        //code on succession.
    }else{

        //code on failure.
    }
}