JavaScriptメールアドレスチェッカー

JavaScriptメールアドレスチェッカー

Posted at September 18,2014 12:33 AM
Tag:[JavaScript, Mail]
  • Hatena ブックマーク
  • del.icio.us
  • livedoor
  • Google Bookmarks
  • Yahoo!ブックマーク
  • POOKMARK Airlines
  • ニフティクリップ
  • Buzzurl
  • newsing it!

JavaScriptのメールアドレスチェッカーを作ってみました。

JavaScriptのメールアドレスチェッカー

記事を書くにあたって、メールアドレスについてのRFCや関連記事をざっと調べてみました。

結果、どういったバリデーションチェックがよいのか落としどころがみつかってませんが、単純にJavaScriptで正規表現を使って動くものを作ってみたいと思っただけなので、ゆるいチェック(現実的)とややきびしいチェックの2つに対応させてみました。

1.メールアドレスチェッカー

下記のフォームからモードを選択し、メールアドレスを入力して「チェック」をクリックすれば検証結果を表示します。

ゆるい(現実的) きびしい

結果:

ゆるい方のチェックは次のとおりです(抜粋)。

$(function(){
    $('#check').click(function(){
        var address = $('#address').val();
        if (address.match(/^[^@]+@.+\..+$/)) {
            $('#result').text("OK");
        } else {
            $('#result').text("NG");
        }
    });
});

きびしい方のコードは次のとおりです(抜粋)。

$(function(){
    $('#check').click(function(){
        var address = $('#address').val();
        if (address.match(/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/i)) {
            $('#result').text("OK");
        } else {
            $('#result').text("NG");
        }
    });
});

きびしい方のチェックで用いている正規表現は、「Comparing E-mail Address Validating Regular Expressions」にあるPHPのfilter_varの検証用フィルタFILTER_VALIDATE_EMAILを利用しています(Dフラグはサポートされていないので外しました)。

よってPHPの下記のコードと同じ結果が得られると思いますが、認識が間違っていたらどこかでつぶやいてください。

<?php
if ( filter_var($address, FILTER_VALIDATE_EMAIL) ) {
    echo "OK";
} else {
    echo "NG";
}
?>

RFCモードでバリデーションOKにならないメールアドレスもあるので、詳しくは参考記事を参照ください。

2.参考サイト

参考サイトは下記です。ありがとうございました。

関連記事
トラックバックURL


コメントする
コメントするにはまずサインインしてください。
Loading...