0

入力をループし、ID が配列内にあるかどうかを確認し、配列内にある場合は、ボックスに何かが入力されていることを確認する単純なフォーム検証スクリプトがあります。ただし、何らかの理由で、コードの各部分が壊れています。

私のコード:

function ValForm() {
    var validate = ['name', 'addr1', 'city', 'county', 'pcode'];
    var regpcode = '/^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i';
    var fail = false;
    $('#summary-wrap input').each(function() {
        var id = $(this).attr('id');
        if($.inArray(id, validate)) {
            if(id == 'pcode' && !regpcode.test(this.value)) {
                fail = true;
            } else if(this.value.length < 2) {
                fail = true;
            }
        }
    });
    if(fail) {
        alert('Please complete all required fields before continuing.');
        $(this).focus();
        return false;
    }
    return true;
}

無効なデータを入力しても、フォームは送信されます。fail = true を設定したり、すべての return を false にしたりしても、フォームは送信されます。ここに私のフォームがあります:

    <form name="delivery" action="knee-icepack.php" method="post" onsubmit="return ValForm();">
            <label for="name">Name <span class="req">*</span>:</label><input type="text" name="name" id="name" required="required" />
            <br clear="all" />
            <label for="addr1">Address Line 1 <span class="req">*</span>:</label><input type="text" name="addr1" id="addr1" required="required" />
            <br clear="all" />
            <label for="addr2">Address Line 2:</label><input type="text" name="addr2" id="addr2" />
            <br clear="all" />
            <label for="city">Town / City <span class="req">*</span>:</label><input type="text" name="city" id="city" required="required" />
            <br clear="all" />
            <label for="county">County <span class="req">*</span>:</label><input type="text" name="county" id="county" required="required" />
            <br clear="all" />
            <label for="pcode">Post Code <span class="req">*</span>:</label><input type="text" name="pcode" id="pcode" required="required" />
            <br clear="all" />
            <input type="submit" id="submit" value="Proceed to Payment" />
            <input type="hidden" name="deliveryDetailsSubmitted" value="1" />
            <img src="images/paypal.jpg" align="right" />
            <br clear="all" />
            <span class="small"><span class="req">*</span> required field.</span>
        </form>

ただし、ValForm 関数から .each ループを削除すると、fail = true を設定するとフォームの送信が停止します。ループ内にコードを含めることはできませんが、それでも機能しません。何が起こっている?これは私を夢中にさせています。

4

1 に答える 1

1

正規表現の定義が間違っています。現在、それは単なる文字列です。それ以外の:

var regpcode = '/^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i';

必要があります(正規表現リテラルを使用し、折り返し'文字は使用しません)

var regpcode = /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i;

または (正規表現オブジェクトのコンストラクターを呼び出す)

var regpcode =  new RegExp('/^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i');

詳細はこちら

現在、コードはこれで失敗します:!regpcode.test(this.value) コードでは、regpcode は文字列であり、正規表現ではありません。メソッドテストはありません。

于 2013-02-21T11:13:53.703 に答える