3

フォームの検証を行っている単純なクラスプロジェクトがあります。入力を検証するには、いくつかの基本的な正規表現を使用する必要があります。このコードは外部のjsファイルにあります。

onsubmitイベントをキャプチャし、ポストバックを続行するかどうかの検証関数の値を返す関数があります。

問題は、RegEx.test()メソッドを呼び出すと、検証関数が停止して戻り、ポストバックが誤って進行することです。また、「new RegEx()」を使用して正規表現オブジェクトを作成した場合も、同じことが起こります。理由がわからなくなってしまいました。

これが私のコードです:

$(document).ready(function() {

    // onsubmit event    
    $('form').submit(
        function() {
            return validation();
        }
        );

    // form validation
    function validation() {

        resetErrors();

        //variables
        var validates = true;
        var errorString = "";
        //var isEmail = new RegEx('^.+@.+\..+$'); // function stops here if line is uncommented and kicks off the postback?
        //alert("harro new regex?"); // does not run if above line is uncommented


        var isEmail = "/^.+@.+\..+$/"; // this doesn't stop the function
        alert("harro isEmail direct regex string assignment"); // runs

        var isZipCode = "/^(\d{5}$)|(^\d{5}-\d{4}$)/"; // this doesn't stop the function
        alert("harro isZipCode direct regex string assignment"); // runs

        //firstname
        if (!$('#firstName').val().trim()) {
            validates = false;
            $('#firstName').addClass('error');
            errorString += "First Name is blank. <br />";
        }
        //lastname
        if (!$('#lastName').val().trim()) {
            validates = false;
            $('#lastName').addClass('error');
            errorString += "Last Name is blank. <br />";
        }
        //email
        if (!$('#email').val().trim()) {
            validates = false;
            errorString += "Email is blank. <br />";
            $('#email').addClass('error');
        }
        // if this runs the test, the function stops here
        else if (!isEmail.test(email.value)) {
            validates = false;
            errorString += "Please enter a valid email address. <br />";
            $('#email').addClass('error');
        }
        alert("harro rest of function after email test?")// does not run if "else if" is ran

        //address
        if (!$('#address').val().trim()) {
            validates = false;
            $('#address').addClass('error');
            errorString += "Address is blank. <br />";
        }

        //zipcode
        if (!$('#zipCode').val().trim()) {
            validates = false;
            $('#zipCode').addClass('error');
            errorString += "Zipcode is blank. <br />";
        }
        // if this runs the test, the function stops here
        else if (!isZipCode.test(zipCode.value)) {
            validates = false;
            $('#zipCode').addClass('error');
            errorString += "Please enter a valide zip code. <br />";
        }
        alert("harro rest of function after zipcide test?")// does not run if "else if" is ran


        if (validates) {
            return true;
        }

        //output error messages
        $('#pageTitle').after("<p id='errorText'>" + errorString + "</p>");

        return false;
    }

    //reset validation errors
    function resetErrors() {

        $('#errorText').remove();
        $('#firstName').removeClass('error');
        $('#lastName').removeClass('error');
        $('#email').removeClass('error');
        $('#address').removeClass('error');
        $('#zipCode').removeClass('error');

    }

});
4

2 に答える 2

5

「p」がありません。RegExではなくRegExpです。

var isEmail = new RegExp('^.+@.+\..+$');

ただし、一般的にこれらの問題では、FirebugまたはChromeデベロッパーツールを開いて(WindowsではF12)、エラーの原因を確認できます。コンソールで新しいRegex()を作成すると、 Regexが定義されていないことが通知されます。また、RegE ...の作成を開始すると、RegExpにオートコンプリートされます。

于 2012-10-23T15:54:35.677 に答える
2

JavaScriptコンソールでエラーメッセージを確認できます。これらは、RegExの代わりにRegExpを使用することにつながる可能性があります!!

于 2012-10-23T15:52:55.333 に答える