jQueryを使用したメール検証


回答:


703

通常の古いJavaScriptを使用できます。

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

66
はい、そうです。jQueryはまだjavascriptであることを思い出してください:)
Fabian

36
この正規表現はほとんどの実際のアドレスを有効と見なしますが、それでも多くの偽陽性と偽陰性があります。たとえば、ウィキペディアで有効なメールアドレスと無効なメールアドレスの例をご覧ください。
アーセニー、

1
@Umingo email@127.0.0.1は引き続き有効な電子メールですが、より適切な方法で作成することができます。ドメインのどの部分も[a-z0-9]以外の文字で始めることはできません(大文字と小文字は区別されません)。また、有効な電子メール(およびドメイン)にはlenの制限があり、これもテストされていません。
tomis 2013

10
新しいトップレベルドメインがより一般的になると、この正規表現は.systemsや.pokerなどを変更する必要がありますが、すべて有効なTLDですが、正規表現チェックに失敗します
Liath

3
Theoの別の回答に対するコメントによると、.museumなどの新しいTLDをサポートするように変更var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;する必要がありますvar regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,6})+$/;
Ira Herman

164

電子メールを検証するためのjQuery関数

特にフォームに検証が必要なフィールドが1つしかない場合は特に、プラグインを使用したくありません。この関数を使用して、電子メールフォームフィールドを検証する必要があるときに呼び出します。

 function validateEmail($email) {
  var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  return emailReg.test( $email );
}

そして今これを使用する

if( !validateEmail(emailaddress)) { /* do stuff here */ }

乾杯!


16
ちょうど戻る必要がありますemailReg.test($email);
nffdiogosilva

7
ちなみに、これは空のメールアドレスに対してtrueを返します。例えばemailReg.text("") true。私はこの後、emailRegのVARの宣言まで簡単に機能をしたい:return ( $email.length > 0 && emailReg.test($email))
Diziet

14
私たちは今、.museumのような6つの文字でドメイン名の拡張子を持っているので、変更したい、そのためのEmailAddress妥当性をチェックするための正規表現は、古くなっ var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
テオ

3
あなたは@ h.coatesです!私はこのスレッドに来て、jQueryが実際に組み込みの電子メール検証を持っていることを発見したいと思っていました。移動してください、これらはあなたが探しているドロイドではありません...
iGanja 14

3
@Theoのポイントは重要ですが、TLDの実際の長さは6を超える必要があります。拡張の理論上の上限は63文字です。現在最長のものは20を超えてい
TLD /

41

いくつかの理由でjQuery検証プラグインを使用します。

あなたは検証しました、大丈夫です、今何ですか?あなたはエラーを表示する必要があります、それが有効なときにそれを消去することを処理し、おそらく合計でいくつのエラーを表示しますか?それはあなたのために扱うことができる多くのものがあります、車輪を再発明する必要はありません。

また、別の大きな利点は、CDN上でホストされている、現在のバージョンこの回答の時点では、ここで見つけることができます:http://www.asp.net/ajaxLibrary/CDNjQueryValidate16.ashxを この手段ロード時間の短縮をクライアントのために。


6
わかりました...車輪を再発明する必要はありません。しかし、なぜフィールドを検証するために何十キロバイトものJavascriptをインストールする必要があるのですか?新しいホイールさえあれば、自動車工場を建てるようなものです:)
kraftb '25

3
@kraftb私の回答で述べたように、それはテキスト自体を検証するだけでなく、検証の周りの処理と表示です。
Nick Craver

5
この@NickCraverをありがとう:これは本当に、電子メールの検証を処理する問題に対する「ベストプラクティス」のアプローチのようです。これは、間違いなく、ホイールを取得するためにファクトリを構築する(すべての作業を行うためにlibsを作成する)のとは異なります。それは、車にワゴンホイールを取り付ける方法を理解するのではなく、工場の指示に従ってホイールを最新の車両に取り付ける(車をジャッキアップし、ホイールを配置する-ラグナットを取り付ける)のと同じです。このプラグインは使い方がとても簡単です。フォーム検証を行うには、文字どおりインクルード、いくつかの注釈、および単一のメソッド呼び出しです。
jfgrissom 2014

3
これで、「ホイールを再発明する」というメタファーを再発明しています!
Dom Vinyard


38

http://bassistance.de/jquery-plugins/jquery-plugin-validation/を見てください。これは、フォーム用の強力な検証システムを構築できる、素晴らしいjQueryプラグインです。ここにいくつかの便利なサンプルがあります。したがって、フォームの電子メールフィールド検証は次のようになります。

$("#myform").validate({
  rules: {
    field: {
      required: true,
      email: true
    }
  }
});

参照してください電子メール法のドキュメントの詳細およびサンプルのために。


1
最後の1つはまだ生きています)
Andrew Bashtannik

6
しかし、受け入れられている形式はx@x(奇妙なx@x.xことですが)必要があります。どうすれば修正できますか?
Basheer AL-MOMANI 2016年

2
BasheerAL-MOMANI [@ jqueryvalidation.org/jQuery.validator.methods/] $.validator.methods.email = function( value, element ) { return this.optional( element ) || //^.+@.+\..+$/.test( value ); }
ビルジリンガム

17
<script type="text/javascript">
    $(document).ready(function() {
      $('.form_error').hide();
      $('#submit').click(function(){
           var name = $('#name').val();
           var email = $('#email').val();
           var phone = $('#phone').val();
           var message = $('#message').val();
           if(name== ''){
              $('#name').next().show();
              return false;
            }
            if(email== ''){
               $('#email').next().show();
               return false;
            }
            if(IsEmail(email)==false){
                $('#invalid_email').show();
                return false;
            }

            if(phone== ''){
                $('#phone').next().show();
                return false;
            }
            if(message== ''){
                $('#message').next().show();
                return false;
            }
            //ajax call php page
            $.post("send.php", $("#contactform").serialize(),  function(response) {
            $('#contactform').fadeOut('slow',function(){
                $('#success').html(response);
                $('#success').fadeIn('slow');
               });
             });
             return false;
          });
      });
      function IsEmail(email) {
        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        if(!regex.test(email)) {
           return false;
        }else{
           return true;
        }
      }
  </script>

<form action="" method="post" id="contactform">
                            <table class="contact-table">
                              <tr>
                                <td><label for="name">Name :</label></td>
                                <td class="name"> <input name="name" id="name" type="text" placeholder="Please enter your name" class="contact-input"><span class="form_error">Please enter your name</span></td>
                              </tr>
                              <tr>
                                <td><label for="email">Email :</label></td>
                                <td class="email"><input name="email" id="email" type="text" placeholder="Please enter your email" class="contact-input"><span class="form_error">Please enter your email</span>
                                  <span class="form_error" id="invalid_email">This email is not valid</span></td>
                              </tr>
                              <tr>
                                <td><label for="phone">Phone :</label></td>
                                <td class="phone"><input name="phone" id="phone" type="text" placeholder="Please enter your phone" class="contact-input"><span class="form_error">Please enter your phone</span></td>
                              </tr>
                              <tr>
                                <td><label for="message">Message :</label></td>
                                <td class="message"><textarea name="message" id="message" class="contact-input"></textarea><span class="form_error">Please enter your message</span></td>
                              </tr>
                              <tr>
                                <td></td>
                                <td>
                                  <input type="submit" class="contactform-buttons" id="submit"value="Send" />
                                  <input type="reset" class="contactform-buttons" id="" value="Clear" />
                                </td>
                              </tr>
                            </table>
     </form>
     <div id="success" style="color:red;"></div>

15

<!-- Dont forget to include the jQuery library here -->
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">

$(document).ready(function() {

    $("#validate").keyup(function(){

        var email = $("#validate").val();

        if(email != 0)
        {
            if(isValidEmailAddress(email))
            {
                $("#validEmail").css({
                    "background-image": "url('validYes.png')"
                });
            } else {
                $("#validEmail").css({
                    "background-image": "url('validNo.png')"
                });
            }
        } else {
            $("#validEmail").css({
                "background-image": "none"
            });         
        }

    });

});

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}

</script>

<style>
    #validEmail
    {
        margin-top: 4px;
        margin-left: 9px;
        position: absolute;
        width: 16px;
        height: 16px;
    }

    .text
    {
        font-family: Arial, Tahoma, Helvetica;
    }
</style>

    <title>Live Email Validation with jQuery Demo</title>
</head>
<body>
    <div class="text"><h1>Reynoldsftw.com - Live Email Validation</h1><h2>Type in an email address in the box below:</h2></div>
    <div><input type="text" id="validate" width="30"><span id="validEmail"></span></div>
    <div class="text"><P>More script and css style

www.htmldrive.net


出典:htmldrive.com


14

Verimail.jsをお勧めします。JQuery プラグインも含まれています

どうして?Verimailは以下をサポートします。

  • 構文検証(RFC 822に準拠)
  • IANA TLD検証
  • 最も一般的なTLDと電子メールドメインのスペル提案
  • mailinator.comなどの一時的なメールアカウントドメインを拒否する

したがって、検証に加えて、Verimail.jsは提案も提供します。したがって、間違ったTLDまたは一般的なメールドメイン(hotmail.com、gmail.comなど)とよく似たドメインのメールを入力すると、これが検出され、修正が提案されます。

例:

  • test@gnail.con-> test @ gmail.comですか?
  • test@hey.nwt-> test @ heyですか?ネット
  • test@hottmail.com-> test @ hotmail.comという意味ですか?

等々..

jQueryで使用するには、サイトにverimail.jquery.jsを含めて、以下の関数を実行します。

$("input#email-address").verimail({
    messageElement: "p#status-message"
});

メッセージ要素は、メッセージが表示される要素です。「メールが無効です」から「もしかして...?」

フォームがあり、メールが有効でない限り送信できないようにフォームを制限したい場合は、次のようにgetVerimailStatus-functionを使用してステータスを確認できます。

if($("input#email-address").getVerimailStatus() < 0){
    // Invalid
}else{
    // Valid
}

この関数は、オブジェクトComfirm.AlphaMail.Verimail.Statusに従って整数のステータスコードを返します。ただし、一般的な経験則では、0未満のコードはエラーを示すコードです。


.getVerimailStatus()数値のステータスコードを返さず、文字列値のみsuccesserrorまたは場合によってはpending(最後のコードを検証しませんでした)を返します。
Niko Nyman

14

function isValidEmailAddress(emailAddress) {
    var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\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]))*(([ \t]*\r\n)?[ \t]+)?")@(([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;
    return pattern.test(emailAddress);
};

if( !isValidEmailAddress( emailaddress ) ) { /* do stuff here (email is invalid) */ }

これは、ユーザーによって提供されたルカ・Filosofiこの回答にこの答え


ASP.NET MVC Razorページでこれを使用する場合は@、別の@文字で文字をエスケープすることを忘れないでください。そう@@、そうでなければ、ビルドエラーが発生します。
Rosdi Kasim


10

これは、より完全な検証を実行します。たとえば、john..doe @ example.comなどのユーザー名の連続するドットをチェックします。

function isValidEmail(email)
{
    return /^[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}$/.test(email)
        && /^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*/.test(email);
}

JavaScriptで正規表現を使用してメールアドレスを検証するをご覧ください。


1
しかし、連続するドットは実際には無効ですか?それどころか、そうすることで有効なメールアドレスを除外することになると思います。
icktoofay 2014年

9

他の人が述べたように、正規表現を使用して、メールアドレスがパターンに一致するかどうかを確認できます。ただし、パターンに一致するメールを引き続き使用することはできますが、私はまだバウンスしたり、偽のスパムメールになります。

正規表現で確認する

var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);

実際のメール検証APIで確認する

メールアドレスが本物で、現在アクティブであるかどうかをチェックするAPIを使用できます。

var emailAddress = "foo@bar.com"
response = $.get("https://isitarealemail.com/api/email/validate?email=" +
    emailAddress,
    function responseHandler(data) {
        if (data.status === 'valid') {
            // the email is valid and the mail box is active
        } else {
            // the email is incorrect or unable to be tested.
        }
    })

詳細については、https://isitarealemail.comまたはブログ投稿を参照してください


8

基本的なフォームがある場合は、入力タイプをメールにしてください: <input type="email" required>

これは、HTML5属性を使用するブラウザーで機能し、JSも必要ありません。上記のスクリプトの一部を使用しても電子メール検証を使用するだけでは、次の理由であまり効果がありません。

some@email.com so@em.co my@fakemail.net

etc ...すべてが「実際の」メールとして検証されます。したがって、ユーザーが自分のメールアドレスを2回入力して、同じアドレスが入力されていることを確認する必要があることを確認したほうがよいでしょう。仕方。ただし、それがメールであることを確認しているだけの場合は、HTML5入力に固執してください。

フィドルの例

これはFireFoxとChromeで動作します。Internet Explorerでは動作しない可能性があります...しかし、Internet Explorerは最低です。それでそれは…


regexpメソッドは通常、a @ bc(リンクされたJSFiddleの例で最新のChromeの使用を許可する)のような明らかにばかげたメールを防止するため、HTML5ソリューションは明らかに不適切なソリューションです。
SnowInferno 2014

涼しい。では、HTML5のようにパターンマッチを使用することは "想定"されているのでしょうか。Chromebookでこれを試してみませんか。jsfiddle.net/ du676
isaacが

8

MVC / ASP.NETでのJavaScriptメール検証

Fabianの回答を使用しているときに遭遇した問題は、Razor @シンボルのためにMVCビューでそれを実装することです。@それをエスケープするには、次のように追加の記号を含める必要があります。@@

MVCでカミソリを回避するには

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

このページのどこにも表示されなかったので、役立つと思いました。

編集

これは、その使用法を説明するMicrosoftからのリンクです。
上記のコードをテストして、次のjsを取得しました。

function validateEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
  return regex.test(email);
}

それはまさにそれがすることになっていることをやっている。


@nbrogiこれが機能しないとはどういう意味ですか?これをもう一度チェックしたところ、次のjsが生成さvar regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; れました。コードで何が起こっていますか?
Trevor Nestman、2017

申し訳ありませんが、現時点ではわかりません。完全に変更しました。
nkkollaw 2017

可能であればお知らせください。これが悪い情報である場合は、削除します。可能な場合は役立つ情報を提供するように努めていますが、これはMVCビューで正規表現を書くときに役立ちました。
Trevor Nestman、2017

繰り返しますが、これがなぜ反対票だったのかを知りたいのですが。それはまさに私が望んでいることを行い、それは@の正規表現でシンボルを生成し.cshtmlます。通常は、@シンボルの後のすべてをかみそりのコードとして処理しようとしますが、2重@@はそれを防ぎます。
Trevor Nestman、2017

私が目にする主な問題は、2番目のコードブロックにあり、正規表現はregexという名前の変数に設定されていますが、2行目はreという名前の変数を使用しています
20:36

7
function isValidEmail(emailText) {
    var pattern = new RegExp(/^((([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);
    return pattern.test(emailText);
};

このように使用:

if( !isValidEmail(myEmail) ) { /* do things if myEmail is valid. */ }

6
function validateEmail(emailaddress){  
   var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;  
   if(!emailReg.test(emailaddress)) {  
        alert("Please enter valid email id");
   }       
}

5
<script type = "text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type = "text/javascript">
    function ValidateEmail(email) {
        var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        return expr.test(email);
    };
    $("#btnValidate").live("click", function () {
        if (!ValidateEmail($("#txtEmail").val())) {
            alert("Invalid email address.");
        }
        else {
            alert("Valid email address.");
        }
    });
</script>
<input type = "text" id = "txtEmail" />
<input type = "button" id = "btnValidate" value = "Validate" />

4

ここに着陸.....ここまで終了:https : //html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address

...これは次の正規表現を提供しました:

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

... jQuery検証プラグインのreadmeのメモのおかげで見つかりました:https : //github.com/jzaefferer/jquery-validation/blob/master/README.md#reporting-an-issue

したがって、@ Fabian回答の更新バージョンはのようになります。

function IsEmail(email) {
  var regex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
  return regex.test(email);
}

それが役に立てば幸い


この1は私にとって最高の答えだった-それは上trueを返しjohn..doe@example.comますがそれは偽だったしたい
アダム騎士

3

これを使って

if ($this.hasClass('tb-email')) {
    var email = $this.val();
    var txt = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!txt.test(email)) {
        e.preventDefault();
        $this.addClass('error');
    } else {
        $this.removeClass('error');
    }
}

3

バグはJquery Validation Validation Pluginにあり、@で検証してこれを変更します

コードをこれに変更します

email: function( value, element ) {
    // From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
    // Retrieved 2014-01-14
    // If you have a problem with this implementation, report a bug against the above spec
    // Or use custom methods to implement your own email validation
    return this.optional( element ) || /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test( value );
}

3

より良い保守性を使用したい人のために破壊的な試合よりも性の高いソリューション数行のコードを書きました。バイトを節約したい人を選ぶには、RegExバリアントに固執します:)

これは制限します:

  • 文字列に@がない
  • 文字列にドットがありません
  • @の後に2ドット以上
  • ユーザー名の不正な文字(@の前)
  • 文字列に2つ以上の@
  • ドメイン内の不正な文字
  • サブドメインに不正な文字があります
  • TLDの不正な文字
  • TLD-アドレス

とにかく、それでもリークする可能性があるので、これをサーバー側の検証+メールリンク検証と組み合わせてください。

これが JSFiddleです

 //validate email

var emailInput = $("#email").val(),
    emailParts = emailInput.split('@'),
    text = 'Enter a valid e-mail address!';

//at least one @, catches error
if (emailParts[1] == null || emailParts[1] == "" || emailParts[1] == undefined) { 

    yourErrorFunc(text);

} else {

    //split domain, subdomain and tld if existent
    var emailDomainParts = emailParts[1].split('.');

    //at least one . (dot), catches error
    if (emailDomainParts[1] == null || emailDomainParts[1] == "" || emailDomainParts[1] == undefined) { 

        yourErrorFunc(text); 

     } else {

        //more than 2 . (dots) in emailParts[1]
        if (!emailDomainParts[3] == null || !emailDomainParts[3] == "" || !emailDomainParts[3] == undefined) { 

            yourErrorFunc(text); 

        } else {

            //email user
            if (/[^a-z0-9!#$%&'*+-/=?^_`{|}~]/i.test(emailParts[0])) {

               yourErrorFunc(text);

            } else {

                //double @
                if (!emailParts[2] == null || !emailParts[2] == "" || !emailParts[2] == undefined) { 

                        yourErrorFunc(text); 

                } else {

                     //domain
                     if (/[^a-z0-9-]/i.test(emailDomainParts[0])) {

                         yourErrorFunc(text); 

                     } else {

                         //check for subdomain
                         if (emailDomainParts[2] == null || emailDomainParts[2] == "" || emailDomainParts[2] == undefined) { 

                             //TLD
                             if (/[^a-z]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text);

                              } else {

                                 yourPassedFunc(); 

                              }

                        } else {

                             //subdomain
                             if (/[^a-z0-9-]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text); 

                             } else {

                                  //TLD
                                  if (/[^a-z]/i.test(emailDomainParts[2])) {

                                      yourErrorFunc(text); 

                                  } else {

                                      yourPassedFunc();
}}}}}}}}}

3

jQuery Validationを使用して、単一のHTML行で、電子メールと電子メール検証メッセージを検証できます。type="email" required data-msg-email="Enter a valid email account!"

あなたは使用することができ、データ-MSG-電子メール「有効なメールアドレスを入力してください。」:パーソナライズされたメッセージを配置するためのパラメータを、あるいはこのパラメータを置かないと、デフォルトのメッセージが表示されます。

完全な例:

<form class="cmxform" id="commentForm" method="get" action="">
  <fieldset>
    <p>
      <label for="cemail">E-Mail (required)</label>
      <input id="cemail" type="email" name="email" required data-msg-email="Enter a valid email account!">
    </p>
    <p>
      <input class="submit" type="submit" value="Submit">
    </p>
  </fieldset>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/jquery.validate.js"></script>
<script>
$("#commentForm").validate();
</script>

2
if($("input#email-address").getVerimailStatus() < 0) { 

(incorrect code)

}

if($("input#email-address").getVerimailStatus() == 'error') { 

(right code)

}

9
答えを詳しく説明してください...たとえば、getVerimailStatusは追加のプラグインであることを言及する必要があります。
Dave Hogan

2
checkRegexp( email, /^((([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, "eg. ui@jquery.com" );

参考:JQUERY UI WEBSITE



2

別のシンプルで完全なオプション:

<input type="text" id="Email"/>
<div id="ClasSpan"></div>   
<input id="ValidMail" type="submit"  value="Valid"/>  


function IsEmail(email) {
    var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return regex.test(email);
}

$("#ValidMail").click(function () {
    $('span', '#ClasSpan').empty().remove();
    if (IsEmail($("#Email").val())) {
        //aqui mi sentencia        
    }
    else {
        $('#ClasSpan').append('<span>Please enter a valid email</span>');
        $('#Email').keypress(function () {
            $('span', '#itemspan').empty().remove();
        });
    }
});

3
Stack Overflowは英語のサイトです。他の言語でコンテンツを投稿しないでください。
アンデルス

2

独自の関数を作成できます

function emailValidate(email){
    var check = "" + email;
    if((check.search('@')>=0)&&(check.search(/\./)>=0))
        if(check.search('@')<check.split('@')[1].search(/\./)+check.search('@')) return true;
        else return false;
    else return false;
}

alert(emailValidate('your.email@yahoo.com'));

1

私が作成した単純化されたものは、私が必要とすることを行います。英数字、ピリオド、アンダースコア、@のみに制限しました。

<input onKeyUp="testEmailChars(this);"><span id="a"></span>
function testEmailChars(el){
    var email = $(el).val();
    if ( /^[a-zA-Z0-9_@.-]+$/.test(email)==true ){
        $("#a").html("valid");
    } else {
        $("#a").html("not valid");
    }
}

他の人の助けを借りて作られました


1

この正規表現は、abc @ abc.com.com.com.comのようなドメイン名の重複を防ぎ、abc @ abc.co.inのようなドメインのみを2回許可します。また、123abc @ abc.comのような番号からの統計は許可されません。

 regexp: /^([a-zA-Z])+([a-zA-Z0-9_.+-])+\@(([a-zA-Z])+\.+?(com|co|in|org|net|edu|info|gov|vekomy))\.?(com|co|in|org|net|edu|info|gov)?$/, 

ではごきげんよう !!!!!


1

ボタンの状態を処理して、入力中にメールを検証します。

$("#email").on("input", function(){
    var email = $("#email").val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (!filter.test(email)) {
      $(".invalid-email:empty").append("Invalid Email Address");
      $("#submit").attr("disabled", true);
    } else {
      $("#submit").attr("disabled", false);
      $(".invalid-email").empty();
    }
  });

1

jquery検証を使用している場合

私のcustm形式にemailCustomFormat使用 するメソッドを作成しました。regexこれは、要件に合わせて変更できます。

jQuery.validator.addMethod("emailCustomFormat", function (value, element) {
        return this.optional(element) || /^([\w-\.]+@@([\w-]+\.)+[\w-]{2,4})?$/.test(value);
    }, abp.localization.localize("FormValidationMessageEmail"));// localized message based on current language

その後、このように使用できます

$("#myform").validate({
  rules: {
    field: {
      required: true,
      emailCustomFormat : true
    }
  }
});

この正規表現は受け入れます

abc@abc.abcabc@abc.abcd しかしこれではない

abc@abcabc@abc.aabc@abc.abcde

これがあなたを助けることを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.