0

検証しようとしているフォームがあります。要件では、電子メールのユーザー名にアンダースコアとハイフンを使用できますが、電子メールのユーザー名の先頭または末尾に特殊文字(ハイフンとアンダースコアを含む)を使用することはできません。

これは、フォーム検証で正規表現を使用して実行されますか?それとも、別のjquery関数で実行されますか?メールのユーザー名の最初または最後の文字として特殊文字が使用されている場合にエラーを発生させようとしています。

メールフィールドの検証コードは次のとおりです。

email: 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);
    },

そして、登録フォーム検証のコードは次のとおりです。

if (form == 'registration') {
    var validation_rules = {
        rules: {
            password_confirm: {
                equalTo: "#password"
            },
            email: {

            },
            email_confirm: {
                equalTo: "#email"
            },
            dd_reg_month: "required"
        },
        groups: {
            birthday: "dd_reg_month dd_reg_year"
        },
        errorPlacement: function(error, element) {
            if (element.attr("name") == "dd_reg_month" || element.attr("name") == "dd_reg_year") $("#reg_birthday").append(error);
            else error.insertAfter(element);
        },
        validClass: "success",
        success: "success",
        focusInvalid: false,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            var ipAddress =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
                if (errors) {
                    var message = errors == 1 ? 'Please correct the error below' : 'Please correct the ' + errors + ' errors below.';
                    $("div.error_info").html(message);
                    $("div.error_info").show();

                } else {
                    $("div.error_info").hide();
                    $('form input.success').css('border-color', 'green');
                }
        },
        ignore: ".ignore"


    };
}

どんな助けでも、先頭と末尾のキャラクターをどのように扱うかについての手がかりでさえ、完全に素晴らしいでしょう。

4

3 に答える 3

0

特別な要件が通常の無効な電子メールと同じエラーをトリガーする必要がある場合は、検証機能に入れることができます。

これはおそらく電子メール検証の正規表現に含まれている可能性がありますが、それを変更するためにその巨大なことに飛び込むつもりはありません。以下の私のコードは、電子メールが検証された後、特別なケースをテストするために、追加の正規表現を追加します。

email: function(value, element) {
    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
    var valid = 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);
    return valid && /^[a-z].*[a-z]@.+/i.test(value);
},
于 2012-05-18T22:46:28.517 に答える
0

jqueryはわかりませんが、正規表現が.NETの場合は、先読みアサーションと後読みアサーションをいくつか挿入するだけで問題が解決する可能性があります。

これは拡張されています。それらが追加された場所を見て、正規表現に挿入するだけです。
それがうまく機能する場合、そうでない場合は、試す価値がありました。

/
  ^
    (

(?![_-])

      (
         (
            [a-z]
          | \d
          | [\-\_]
          | [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
         )+
         (
           \.
           (
              [a-z]
            | \d
            | [\-\_]
            | [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
           )+
         )*

(?<![_-])

      )

    |

      (
        (\x22)                                           "

(?![\x01-\x20\x7f]*[_-])

        (
           (
              (
                 (\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)+
        )?

(?<![_-][\x01-\x20\x7f]*)

        (\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
于 2012-05-19T01:28:08.003 に答える
0

貢献してくれてありがとう!私はトリックをしたいくつかの正規表現を見つけました-このサイトは本当に役に立ちます:http://regexlib.com/DisplayPatterns.aspx

私が使用したパターンはこれで、RobEberhardtによって投稿されました。

^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$

誰かが同じ問題に遭遇した場合に備えて、私が共有したいと思いました。電子メールの検証で他のことを行う必要がある場合は、正規表現ライブラリを確認してください。すばらしいパターンがたくさんあります。私は正規表現に不慣れで、今日までまだ聞いていませんでした。:-)

再度、感謝します!

于 2012-05-19T22:12:35.470 に答える