1

onkeyup と onsubmit の検証を行う必要があります。3 桁または 4 桁の数字を受け入れる CVV というフィールドがあるため、「^(d){3,4}$」を使用しています。このパターンは、onsubmit 関数では正常に機能しますが、onkeyup 関数では常にfalse3 桁の数字を入力しても取得されます。

<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 に答える