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年03月02日

チャットとかでパスワードを教えるとき暗号化すると良い

チャットとかメールでパスワードなんかを教えたい時、パスワードを直接ネットに貼り付けるのはだいぶ怖い。相手と共有してるキーみたいな情報で暗号化&復号化できれば安心してネットに貼れると思った。普通に*nixツールでこういうことできるのあるだろうと探してみたところなんとOpenSSL…

2013年02月20日

ブログにシンタックスハイライト機能つけた

ブログにコードを載せることが多くなりそうなので、コードスニペットをいい感じにHTMLで成形してくれるやつを組み込んでみた。1年前の自分は syntaxhighlight.inがよさそう なんて言ってるけど、いちいちWeb…

2013年02月17日

牧場に行った

バンジージャンプをしました。 バンジージャンプがあるとは知らなかったんだけど、たまたまあったから飛びました。 ラッキーだったと思います。 アルパカです。 以上、先週の日記でした。

2012年12月31日

2012年を振り返ってまとめた

2012年06月07日

画像を壊して綺麗にするWebサービス glitch.so を公開しました。