1

場合によっては、jQuery Validate プラグインが電子メールの検証に完全ではないことがあります。「abc@test.c」(1 文字のサフィックス) と「중국어@test.com」(非英数字) が有効な電子メール アドレスとして渡されます。

jQuery Validate プラグインを使用して、これら 2 つの無効な電子メール アドレスをフィルタリングするにはどうすればよいですか?

4

2 に答える 2

0

これが私の解決策remote:です:

$("#myForm").validate({
    rules: {
        femail: {
            required: true,
            email: true,
            remote: "lib/ajax/checkEmail.php"
        }
    },
    messages: {
        femail: {
            required: 'Please input email',
            email: 'Please input valid email',
            remote: 'This email is duplicated/invalid, please re-input an email'
        }
    },
    submitHandler: function(form) {
        form.submit();
    }
});

ではcheckEmail.php、特別なケースを検証するための追加のロジックを実装し、少なくともエコーするtrueか、その代わりにエコーfalseします。

それが役に立てば幸い。

于 2012-12-20T02:33:52.170 に答える
0

ドキュメントに従って、独自のカスタム メソッドを作成する必要があります。

カスタム検証メソッドを追加します。これは、名前 (有効な JavaScript 識別子である必要があります)、JavaScript ベースの関数、およびデフォルトの文字列メッセージで構成されている必要があります。

引数:

名前; 文字列 メソッドの識別と参照に使用されるメソッドの名前は、有効な JavaScript 識別子である必要があります

方法; Callback 実際のメソッドの実装で、要素が有効な場合に true を返します。最初の引数: 現在の値。2 番目の引数: 検証済みの要素。3 番目の引数: パラメータ。

メッセージ (オプション); 文字列、関数 このメソッドで表示されるデフォルトのメッセージ。jQuery.validator.format(value) によって作成された関数にすることができます。未定義の場合、既存のメッセージが使用されます (ローカライズに便利です)。それ以外の場合は、フィールド固有のメッセージを定義する必要があります。


method以下は私が命名したカスタムですnewemail。現在、「メール」の検証にデフォルトの関数を使用しているだけです。特定のニーズに合わせて、この関数内の正規表現を編集するだけです。

jQuery.validator.addMethod("newemail", function(value, element) {
            // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
            return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value); 
}, "Please enter a valid email address");

.validate()次に、他のルールを使用するのと同じように内部で使用します。

rules: {
    InputName: {
        required: true,
        newemail: true
    }
}
于 2012-12-19T21:24:33.843 に答える