📩

今時のメールアドレス正規表現

2018/04/09に公開

概要

  • メールアドレス入力フォームの検証に正規表現でチェックしています。
  • このたび、メールアドレスの検証に使っている正規表現が書かれているgemにて、メールアドレスの検証ロジックに大幅な変更が入ったので調査してみました。

背景

実運用ではどうするか考える

  • AWS SESは test_test@example.com というマルチバイトを含んだメールアドレスはrejectされる。

  • ASCII以外の文字列って、ユーザの入力ミスの可能性が90%以上だろうし。悩ましい。

  • HTML5のブラウザ側の正規表現は、もっと厳しい。マルチバイトは許されない。

  • 実際は、v1.6の strict_mode オプションを使うのが良いのかなと。

  • v1.6のstrictな正規表現で怪しいメアドをあぶり出すショートコード

name_validation = "-\\p{L}\\d+._"
regex = /\A\s*([#{name_validation}]{1,64})@((?:[-\p{L}\d]+\.)+\p{L}{2,})\s*\z/i
User.all.select {|u| puts u.id unless u.email.match(regex) }
  • URI::MailTo::EMAIL_REGEXP もよさそう。
/\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/

結論

広く許容する場合は以下の正規表現。

[^\s]+@[^\s]+
株式会社マインディア テックブログ

Discussion