簡體   English   中英

驗證onKeyUp

[英]Validation on onKeyUp

我需要對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,'');
    }

您需要在d前面添加一個\\ ,沒有它,則d表示為字符d而不是數字值。 這是您應該使用^\\d{3,4}$的表達式。

編輯

第一部分已經步入正軌,但是我想念您沒有將模式作為字符串傳遞給另一個函數。 如果您要運行new RegExp('^\\d{3,4}$', "")則可以運行,但是由於它是通過函數傳遞的,因此\\字符已被刪除。 為了傳遞帶有反斜杠的字符串,您需要使用\\\\這樣的另一個反斜杠對斜杠進行轉義。 這意味着您的新表達式應為^\\\\d{3,4}$

開發正則表達式時,我通常使用類似http://regexpal.com/的內容來幫助對其進行測試。 請記住,對於這一行,您必須選中^$ match at line breaks (m)框,以匹配多行上的多個測試

工作演示

您需要轉義反斜杠( \\ ),因此您的正則表達式應為^\\\\d{3,4}$而不是^(d){3,4}$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM