Javascript onKeyUp的验证
我需要在keyup和onsubmit上进行验证。 我有一个名为CVV的字段,它接受3或4位数字,所以我使用“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
^(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事件中工作的不确定,你需要给我一个例子。