jQueryと正規表現を使用したメールアドレスの検証


174

これを行う方法がよくわかりません。次のような正規表現を使用してメールアドレスを検証する必要があります:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)

次に、これを次のようなjQuery関数で実行する必要があります。

$j("#fld_emailaddress").live('change',function() { 
var emailaddress = $j("#fld_emailaddress").val();

// validation here? 

if(emailaddress){}

// end validation

$j.ajax({  
        type: "POST",  
         url: "../ff-admin/ff-register/ff-user-check.php",  
        data: "fld_emailaddress="+ emailaddress,  
        success: function(msg)
        { 
            if(msg == 'OK') { 
            $j("#fld_username").attr('disabled',false); 
            $j("#fld_password").attr('disabled',false); 
            $j("#cmd_register_submit").attr('disabled',false); 
            $j("#fld_emailaddress").removeClass('object_error'); // if necessary
            $j("#fld_emailaddress").addClass("object_ok");
            $j('#email_ac').html('&nbsp;<img src="img/cool.png" align="absmiddle"> <font color="Green"> Your email <strong>'+ emailaddress+'</strong> is OK.</font>  ');
            } else {  
            $j("#fld_username").attr('disabled',true); 
            $j("#fld_password").attr('disabled',true); 
            $j("#cmd_register_submit").attr('disabled',true);  
            $j("#fld_emailaddress").removeClass('object_ok'); // if necessary
            $j("#fld_emailaddress").addClass("object_error");
            $j('#email_ac').html(msg);
            }
        }
     });
});

検証はどこに行き、式は何ですか?


回答:


491

更新


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 */ }

2
メールアドレスからのeの「欠落」を除いてaSeptikはうまく機能しますはい、正規表現が100%存在しないことを知っていますが、 "かなり"近くなる可能性があります
RussP

1
はあまり深くは検証しませんでしたが、asdf @ adsf.com
gcb

@gcb:こんにちは、正規表現があなたのニーズを満たさなかった場合、それを変更できます。とにかく私はそれをテストしましたが、うまくいきます。jsfiddle.net/ADPaM
Luca Filosofi

14
クライアントサイドでの正規表現だけでは、メールサーバーがあるかどうか、またはドメイン自体が存在するかどうかはわかりません。電子メールの構文が有効かどうかをマーリーチェックします。これは、ユーザーが正しいアドレスを書き込むのに役立ちます。検証ではありません。
BerggreenDK 2013年

完璧に動作します!おかげメイト

28

これは私の解決策です:

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
    // alert( pattern.test(emailAddress) );
    return pattern.test(emailAddress);
};

ここでRegExpが見つかりました:http : //mdskinner.com/code/email-regex-and-validation-jquery


3
プラス記号に関するあなたのポイントは有効ですが、あなたの正規表現は私が私の例で使用しているものよりも良くありません。PS:プラス記号をサポートするように正規表現を更新しました。
Luca Filosofi、2011年

ほとんどの場合、ユーザーが正しい形式でメールを入力したことを検証するだけです。「@」ではなく「2」のようなタイプミスを識別するため。だから私は元の回答よりもこれが好きですが、aSeptikの回答は包括的であり、私もそれを賛成票で投票しました。
darwindeeds

test @ gmail..comそれは有効だと言っています
間違って

14
$(document).ready(function() {

$('#emailid').focusout(function(){

                $('#emailid').filter(function(){
                   var emil=$('#emailid').val();
              var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
            if( !emailReg.test( emil ) ) {
                alert('Please enter valid email');
                } else {
                alert('Thank you for your valid email');
                }
                })
            });
});

8
実際これは役に立ちました。タイトルにはJQueryと書かれていますが、これはこれまでのところ、jqueryの適切な例がある唯一の回答です。
テイラーミッチェル

これはabc.b. @ yahoo.comを検証します
NoBullMan '19

7

これははるかに良いです

    function isValidEmailAddress(emailAddress) {
        var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
        return pattern.test(emailAddress);
    };

私はあなたのモバイルサイトのソリューションを好みます。もう1つは私のスマートフォンを溶かします;)+1
Hexodus '27

JavaScriptの構文問題
Sajith

äüõなどの文字は検証されません!!
DAH 2014

5

Verimail.jsにはjQueryプラグインを使用することをお勧めします。

どうして?

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

どうやって?

サイトにverimail.jquery.jsを含め、関数を使用します。

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

フォームがあり、送信時にメールを検証する場合は、getVerimailStatus-functionを使用できます。

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

1
Verimailはキーアップを検証し続けます。つまり、入力を開始するとすぐにエラーメッセージが表示されます。一般的に優れたプラグインですが、これは取引ブレーカーです。手動でトリガーされた場合のみ、つまり、[送信]ボタンをクリックするか、フィールドを離れる前に検証することをお勧めします。
Sebastian Schmid


0

正規表現(/^([\w.-]+)@([\w-]+)((.(\w){2,3})+)$/i)を使用してメールアドレスを検証することもできます形式が正しいかどうか。

var emailRegex = new RegExp(/^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$/i);
 var valid = emailRegex.test(emailAddress);
  if (!valid) {
    alert("Invalid e-mail address");
    return false;
  } else
    return true;

0

これを試して

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    return pattern.test(emailAddress);
};

0

あなたはこの機能を使うことができます

 var validateEmail = function (email) {

        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;


        if (pattern.test(email)) {
            return true;
        }
        else {
            return false;
        }
    };

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