我需要对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,'');
}
答案 0 :(得分:1)
您需要在\
前面添加d
,如果没有d
,则^\d{3,4}$
表示为字符d,而不是数字值。这是您应该使用的表达式new RegExp('^\d{3,4}$', "")
。
修改强>
第一部分正在进行中,但我错过了你将模式作为字符串传递给另一个函数。如果您要运行\
它将起作用,但由于它是通过函数传递的,因此\\
字符被删除。为了传递一个带有反斜杠的字符串,你需要使用另一个反斜杠来转义斜杠,如^\\d{3,4}$
。这意味着您的新表达式应为^$ match at line breaks (m)
。
在开发正则表达式时,我通常使用http://regexpal.com/之类的东西来帮助测试它们。请记住,对于这个,您必须检查{{1}}框以使其匹配多行上的多个测试
答案 1 :(得分:1)
您需要退回斜杠(\
),因此正则表达式应为^\\d{3,4}$
而不是^(d){3,4}$