2013年04月10日

WebKit の email バリデーション

/[a-z0-9!#%&$'*+\/=?^_`{|}~.-]+@[a-z0-9-]+(\\.[a-z0-9-]+)*/i

HTML5ではinputタグのtype属性でemailを指定できるようになっていて、メアドっぽくない文字列が入ってたらフォームの送信ができなくなる。JavaScriptでバリデーション書く必要なくなるからどんどん使っていきたいんだけど、結局サーバー側のバリデーションは必要になります。しかもメールアドレスのバリデーションといったら攻略不可能な人類永遠の課題です。時間使って考えたくない。というかクライアントサイドでemailバリデーション使うなら、サーバーサイドも同じパターンを使うのが筋だと思った。WebKitのソースからメールアドレスのバリデーションを行っているコードを探してみましょう。

WebKitはオープンソースなので公式サイトに載ってるレポジトリからcheckoutできるし、非公式Githubレポジトリからcloneすることもできる。ソース見るだけなら後者のほうが便利。

git clone --depth=1 git://github.com/WebKit/webkit.git
cd webkit
git grep email

として検索すると候補が幾つか出てくるので、眺めてみるとターゲットの正規表現が Source/WebCore/html/EmailInputType.cpp にいることがわかる。

EmailInputType.cpp

static const char emailPattern[] =
    "[a-z0-9!#$%&'*+/=?^_`{|}~.-]+" // local part
    "@"
    "[a-z0-9-]+(\\.[a-z0-9-]+)*"; // domain part

これっぽい。合体させてスラッシュをエスケープすると一番最初に書いたやつになります。 正規表現にしては可読性高いし、かなり緩い。ドメインのとこはドットなくても通すみたい。厳密にバリデートする必要がない場合はこれでいいかなっておもった〜

なお、たくさんの人々が使うようなパターンの正規表現は、まずライブラリ使う事を先に考えたほうがいい事を補足しておきます。


2013年08月27日

失職Nightに参加してきた

失職Night on Zusaar - http://www.zusaar.com/event/976003 各位それ失職じゃなくて転職だろこのやろうっておもいました。 FINAL FANTASY XIV…

2013年07月27日

小物エンジニア会でお金の話をした

あー、楽しかった 小物エンジニアの会 : ATND http://atnd.org/events/41091 ※スライドの最後に重要な情報が書いてあります 新宿の公園で小物エンジニア達に Leap Motion 自慢してきた。LT も Leap Motion…

2013年07月11日

http://rec.to にお気に入り保存機能を追加しました

 *サービス名も recto から rec に変身しました。 かねてからたくさんの方々にご利用いただいております http://rec.to ですが、保存したツイートの数がついに6000000…

2013年07月01日

Rails 4 リリース後の世界でのメンテナンスポリシー

要約すると 3.1 以下のバージョンは一切サポートされないのでただちににアップグレードしましょう。 以下 Maintenance policy for Ruby on Rails より New Features 新機能は master…

2013年06月05日

iPhone のバイブを電話の通知だけONにする方法

iPhone のバイブレーションを着信の時と任意のアプリの通知だけ ON…