読者です 読者をやめる 読者になる 読者になる

the industrial

都内で働くITエンジニアの日記

メールアドレスをあらわす正規表現について

program

今日、個人的に信じていたメールアドレスの正規表現に穴があった。

どういうものかというと、

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 も弾いてくれる。

ただ、コレが絶対的に正しいのかというと自身なし。

メールアドレスを表す正規表現は、多分、永遠の課題なのかもしれない...。

regexr.com