メールアドレスの正規表現と分析(JavaScript、email、regex)


簡単に言うと
ユーザー登録をするときは、メールアドレスの正規表現がよく使われます.いくつかの案を挙げましたが、自分のプロジェクトの状況に合わせて、最適な方案を選ぶことができます.
シナリオ1(一般)
ルールの定義は以下の通りです.
  • は、大文字[A-Z]、小文字[a-z]、数字[0-9]、下降線[u]、マイナス記号[-]およびポイント[.]で始まり、何度も繰り返します.
  • の間には@記号が含まれていなければならない.
  • @以後、大文字[A-Z]、小文字[a-z]、数字[0-9]、下降線[u]、マイナス記号[-]およびポイント[.]を接続し、一度に何度も[+]を繰り返す必要があります.
  • の末尾には、必ずポイント番号[.]を接続し、2から4桁の大きさのアルファベット[A-Za-z]{2,4}が必要です.
  • 以上の規則を使って、次のような正規表現を与えます.
    var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    テスト結果:
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = false;
    pattern.test('   @42du.cn') = false;
    ソースコードとデモンストレーションの住所
    案1の説明
    シナリオ1は、最も一般的なメール正規表現検証スキームであり、ほとんどのアプリケーションシーンにも適しています.以上のテストから、この表現はサポートされていません.オンラインおよび.storeの最後のドメイン名です.このようなドメイン名(4ビット以上)を適合させる必要がある場合、正規のエンド{2,4}の制限部分を調整すればよい(例:{2,8}).もう一つの問題はメールのユーザ名に中国語が含まれてはいけません.
    方案2(改訂案1)
    規則の追加は以下の通りです.
  • ユーザ名は、中国語[u 4 e 00-u 9 fa 5]
  • を含むことができる.
  • ドメイン名の末尾は最長8ビット{2,8}
  • であることができます.
    更新された正規表現は以下の通りです.
    var pattern = /^([A-Za-z0-9_\-\.\u4e00-\u9fa5])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/;
    テスト結果:
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('   @42du.cn') = true;
    ソースコードとデモンストレーションの住所
    ソリューション3(安全)
    携帯電話の検証コードが現れる前に、ほぼメールで検証するのはユーザーの一意性を保証する唯一の条件です.臨時メールボックス(10分メールまたは使い捨てメールともいう)の出現により、メールアドレスの検証とアカウントの活性化という仕組みは意味をなさない.臨時のメールアドレスは列挙できないので、私達はやっと白いリストの方式を取ることしかできなくて、限られたメールボックスのドメイン名だけが検証を通じて(通って)許可します.
    案1による補足は以下のようなルールである.
  • メールアドレスのドメイン名は163.com、qq.comまたは42du.cnだけです.
  • 正規表現は以下の通りです.
    var pattern = /^([A-Za-z0-9_\-\.])+\@(163.com|qq.com|42du.cn)$/;
    テスト結果:
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = false;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = true;
    pattern.test('[email protected]') = false;
    pattern.test('   [email protected]') = false;
    ソースコードとデモンストレーションの住所
    方案3の検証は安全性を保証できますが、ホワイトリストが長すぎるとモード文字列が長すぎます.この時にメールアドレスのドメイン名の白いリストを配列に書き上げることができて、正規表現を利用して初歩的な検証をして、白いリストでドメイン名の二次認証をします.
    メールアドレスの検証関数は以下の通りです.
    var isEmail = function (val) {
        var pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
        var domains= ["qq.com","163.com","vip.163.com","263.net","yeah.net","sohu.com","sina.cn","sina.com","eyou.com","gmail.com","hotmail.com","42du.cn"];
        if(pattern.test(val)) {
            var domain = val.substring(val.indexOf("@")+1);
            for(var i = 0; i< domains.length; i++) {
                if(domain == domains[i]) {
                    return true;
                }
            }
        }
        return false;
    }
    //    true
    isEmail("[email protected]");
    上述のisEmail()関数は常用する11種類のメールドメイン名を列挙しています.必要に応じて適切に補足したり削除したりすることができます.
    以上は三太りのメールアドレスの正規表現に対する理解と分析です.不足があれば、ご指摘ください.
    メールアドレス正規表現-42度の空間