日々学んだことを残しておこう。きっと未来の自分が探しにくる。 (ただ忘れっぽいだけです…)

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

-------- : スポンサー広告 :
Pagetop

Javascript メールアドレス 入力値検証 注意


以前、こちらの記事でも正規表現に触れたけど、メールアドレスの入力値検証をJavascriptで作成していて、おやって思ったことあったのでメモします。

この本に入力値検証する際の正規表現についてデータの先頭、末尾は^、$を使うのでなく\A、\zを使っとほうが良いと書いてあった。(p81)
・理由
①^、$は「行の」先頭と末尾を示すもの。
②\A、\zは「入力データ」先頭と末尾を示すもの。
$が改行にマッチすることから改行文字がチェックをすり抜けるため、②を使用した方が良いとのことであった。

今回メールアドレスの正規表現を組み込みたいので、ちょっと調べると。

参考サイト①
メールアドレスの書式チェック
補足説明までしてくれて非常に分かりやすい。
正規表現はこちら
/^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/
しかし、これだとアカウント部分に.(ピリオド)があるものがNGになってしまう。(最近のアドレスって結構入っている)


そこで、↑をベースに2文字目からアンダーバー、ピリオド、ハイフンがOKのように変更して以下の正規表現作成。
/\A[A-Za-z0-9]+[0-9,a-z,A-Z,_,\.,-]+@[\w\.-]+\.\w{2,}\z/
でJavaScriptで作成したけど、思う結果にならない…

参考サイト②
15章 JavaScriptでの正規表現

JavaScriptには\A、\zが用意されていないね。
(言語によって違うんだ、知らなかった)


気を取り直して、
/^[A-Za-z0-9]+[0-9,a-z,A-Z,_,\.,-]+@[\w\.-]+\.\w{2,}$/
でトライ。

うん、イメージ通りの動き。
こんなんで良いのかなと、もう少し調べてみる。

ウヒョー。
この方トップドメイン
すべて登録してチェックしてる!!
mail = document.getElementById("email").value;
if(mail.match(/^[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+@[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+\.(af|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|ac|au|at|az|bh|bd|bb|by|bj|bm|bt|bo|ba|bw|br|io|bn|bg|bf|bi|kh|cm|ca|cv|cf|td|gg|je|cl|cn|cx|cc|co|km|cg|cd|ck|cr|ci|hr|cu|cy|cz|dk|dj|dm|do|tp|ec|eg|sv|gq|er|ee|et|fk|fo|fj|fi|fr|gf|pf|tf|fx|ga|gm|ge|de|gh|gi|gd|gp|gu|gt|gn|gw|gy|ht|hm|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jo|kz|ke|ki|kp|kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|mx|fm|md|mc|mn|ms|ma|mz|mm|na|nr|np|nl|an|nc|nz|ni|ne|ng|nu|nf|mp|no|om|pk|pw|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|kn|lc|vc|ws|sm|st|sa|sn|sc|sl|sg|sk|si|sb|so|za|gs|es|lk|sh|pm|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|bs|ky|tg|tk|to|tt|tn|tr|tm|tc|tv|ug|ua|ae|uk|us|um|uy|uz|vu|va|ve|vn|vg|vi|wf|eh|ye|yu|zm|zw|com|net|org|gov|edu|int|mil|biz|info|name|pro|jp)$/i)){
alert("正しいかも");
}else{
alert("違うかも");
}

横にスクロールして見てみて。

参考サイト②
Webプログラマー+WebデザイナーなZARU日記


でも、今後トップドメイン新しいのができたとき悲しいことになるから真似するのはやめておこう。(この根気に脱帽
最近、知らないドメインいつの間にか出来ていることよくあるし。
jpn.comっていうドメインできていますね


追記2011.7.22新gTLDっていうのが2011年内にできるらしい。そうなったら、↑のやり方では限界だね…

結構満足していたら、こんな記事発見。

参考サイト③
「正しい方法」でメールアドレスを確認するには

って見るとこんなアドレスも実際作れるって。(RFCの規定上有効なメールアドレス。実際にプロバイダが許していないケースが多いと思うけど)

Abc\@def@example.com
customer/department=shipping@example.com
!def!xyz%abc@example.com

えっ、マジですか?

3つとも私のメソッドだとはじいてしまう…
こんなアドレス使う方は相手にしませんっていうので良いのかな(笑)

結構、メールアドレスで入力値検証するのは重労働らしい。
どおりでこれでOKってものが出回っていないわけだ。



もう少し調べた。

マイクロソフトはこんな感じで。サンプルに載せている。
^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$

試したけど、上の3つのアドレス全部弾きますね

参考サイト④
ASP.NET への入力を制約するために正規表現を使用する方法


もう諦めよう。

完璧に対応するのは無理だ。

変なアドレス使う方には申し訳ないが、オーソドックスな方法で作り込みしよっと。
関連記事

2011-06-17 : セキュリティ : コメント : 0 : トラックバック : 0
Pagetop
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

広告

読みたいと思っている書籍

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく Amazon Web Services 定番業務システム12パターン 設計ガイド イラストで学ぶ 機械学習 最小二乗法による識別モデル学習を中心に (KS情報科学専門書) イラストで学ぶ ディープラーニング (KS情報科学専門書)

カウンタ

メールフォーム

名前:
メール:
件名:
本文:

GoogleTranslate

管理人のつぶやき

人気記事ランキング

カテゴリ

openclose

ブログ内検索

全記事表示リンク

全ての記事を表示する

ブログパーツ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。