与一のメモ?

Permalink
Permalink
Permalink katsuta-shigeki:

daizydaizy:

ko10buki:

itokonnyaku:

junsakura:

connectiondepart-2:

usaginobike:

gilthtaxus:

darylfranz:

tk78:

atm09td:

act2012bl:

mukibutsu11:

usaginobike:

xlheads:

gkojaz:

appbank:

takaakik:

shinnya:

mysterytrick:

iyaruoqt66:

(via:udonchan)

suzukichiyo:

nklog:

yoichijerry:

usaginobike:

人生の「レベルアップ」はある日突然ドアを叩く:Garbagenews.com
Permalink darylfranz:

【画像】リクルートスーツを着た女の子が泥遊びをしている光景のエロさは異常www - 【2ch】ニュー速クオリティ
Permalink
Permalink dud2564:

「落書き詰め」/「茶太丸@紅楼夢す22a」の漫画 [pixiv]
Permalink dud2564:

「落書き詰め」/「茶太丸@紅楼夢す22a」の漫画 [pixiv]
Permalink dud2564:

「落書き詰め」/「茶太丸@紅楼夢す22a」の漫画 [pixiv]
Permalink dud2564:

「魔女っこ」/「黄ばんだごはん」のイラスト [pixiv]
Permalink
Permalink

記事を書くにあたって、メールアドレスについての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にならないメールアドレスもあるので、詳しくは参考記事を参照ください。

Permalink
Permalink
Permalink
Permalink