Javascript onKeyUp的验证

Javascript onKeyUp的验证,javascript,regex,Javascript,Regex,我需要在keyup和onsubmit上进行验证。 我有一个名为CVV的字段,它接受3或4位数字,所以我使用“^(d){3,4}$”。 当我在onsubmit函数中执行此操作时,此模式正常工作,但在onkeyup函数中,即使我输入了3位数字,我也总是得到false <input type="text" onkeyup="callonkeyup(this,'First Name','^(d){3,4}$')" value="First Name"> function callo

我需要在keyup和onsubmit上进行验证。 我有一个名为CVV的字段,它接受3或4位数字,所以我使用“
^(d){3,4}$
”。 当我在onsubmit函数中执行此操作时,此模式正常工作,但在onkeyup函数中,即使我输入了3位数字,我也总是得到
false

<input type="text" onkeyup="callonkeyup(this,'First Name','^(d){3,4}$')" value="First Name">

    function callonkeyup(tag,defaultValue,pattern){
        var isValidate = validate(pattern,trim(tag.value),defaultValue);
        console.log("==isValidate=="+isValidate+"==tag.value=="+tag.value+"===pattern==="+pattern);

    }

    function validate(pattern,value,defaultVal){
        var returnValue = false;
        if(value && value != defaultVal){
            while(pattern.indexOf('\\\\') != -1) {
                pattern = pattern.replace('\\\\', "\\");
            }
            var testPattern = new RegExp(pattern,"");
            if (testPattern.test(value)){
                returnValue = true;
            }else{ 
                returnValue = false;
            }
        } 
        return returnValue; 
    }

    function trim(value){
        return value.toString().replace(/^\s+|\s+$/g,'');
    }

函数callonkeyup(标记、默认值、模式){
var isValidate=validate(模式、修剪(tag.value)、defaultValue);
console.log(“==isValidate==”+isValidate+“==tag.value==”+tag.value+“==pattern===”+pattern);
}
函数验证(模式、值、默认值){
var returnValue=false;
if(value&&value!=defaultVal){
while(pattern.indexOf('\\\\')!=-1){
模式=模式。替换(“\\\”,“\\”);
}
var testPattern=newregexp(模式“”);
if(testPattern.test(值)){
returnValue=true;
}否则{
returnValue=false;
}
} 
返回值;
}
功能微调(值){
返回值.toString().replace(/^\s+|\s+$/g');
}

您需要在
d
前面添加一个
\
,没有它,
d
表示为字符d,而不是数值。下面是您应该使用的表达式
^\d{3,4}$

编辑

第一部分已经完成,但我没有注意到您正在将模式作为字符串传递给另一个函数。如果要运行
newregexp(“^\d{3,4}$”)
,它会工作,但因为它是通过函数传递的,所以
\
字符被删除。为了传递包含反斜杠的字符串,需要使用另一个反斜杠来转义斜杠,如so
\\
。这意味着您的新表达式应该是
^\\d{3,4}$

在开发正则表达式时,我通常使用类似的方法来帮助测试它们。请记住,对于此测试,您必须选中
^$match at line break(m)
框,以便在多行上匹配多个测试


您需要转义反斜杠(
\
),因此您的正则表达式应该是
^\\d{3,4}$
,而不是
^(d){3,4}$

对您的问题进行处理模式中的d应该是\d来表示数值,或者它将只表示字符d。@beckerel:我试过d,它不起作用是的,对不起,正如@gurpreet singh在回答中所说的那样,试着逃避它。我错过了那一个-下次我会JSFIDLE:)@becquerel:谢谢模式在onkeyup事件中失败,但在onclick事件中失败,我尝试了使用“^\d{3,4}$”。@user2677473您的JSFIDLE无法工作,因为它位于文档
onload
vs
的头部
。您的onkeyup无法工作,因为它需要更多参数。我会更新我的答案来解释为什么事实上你需要两个``来让它工作非常感谢它工作,但我有一个疑问它是如何在onclick事件中工作的不确定,你需要给我一个例子。