メールアドレスをあらわす正規表現について
今日、個人的に信じていたメールアドレスの正規表現に穴があった。
どういうものかというと、
input type=email – e-mail address input control (NEW) - HTML5 で仕様とされている
\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\b
が、RFCが策定しているメールアドレスの形式に違反した形である foo.baa.@domain.co.tokyo
という形式(※アットマークの前にドットが存在する)に合致してしまう問題。
なので、少し手入れしてこんな感じに...
[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(?!\.).@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
ちなみに、
^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(?!\.).@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
とすると、foo..baa.@domain.co.tokyo
も弾いてくれる。
ただ、コレが絶対的に正しいのかというと自身なし。
メールアドレスを表す正規表現は、多分、永遠の課題なのかもしれない...。