1

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

<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,'');
    }
4

2 回答 2

1

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

编辑

第一部分是正常的,但我错过了您将模式作为字符串传递给另一个函数。如果你要运行new RegExp('^\d{3,4}$', "")它会工作,但因为它是通过一个函数传递的,所以\字符被删除了。为了传递带有反斜杠的字符串,您需要使用另一个反斜杠来转义斜杠,例如 so \\。这意味着您的新表达式应该是^\\d{3,4}$.

在开发正则表达式时,我通常使用http://regexpal.com/之类的东西来帮助测试它们。请记住,对于这个,您必须选中该^$ match at line breaks (m)框以匹配多行上的多个测试

于 2013-10-08T09:00:52.887 回答
1

工作演示

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

于 2013-10-08T09:15:33.413 回答