验证onKeyUp

时间:2013-10-08 08:46:03

标签: 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 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,'');
    }

2 个答案:

答案 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)

Working DEMO

您需要退回斜杠(\),因此正则表达式应为^\\d{3,4}$而不是^(d){3,4}$