Emailアドレスとして適切かどうかのチェックに使えるURI::MailTo::EMAIL_REGEXP

52 views Tweet
wakairo @wakairo
Last edited

rubyの標準添付ライブラリであるuriに存在しているURI::MailTo::EMAIL_REGEXPは、 ある文字列が規格上Emailアドレスとして適切かどうかのチェックに以下のように利用できます。

irb(main):001> require 'uri'
=> true
irb(main):002> 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/
irb(main):003> URI::MailTo::EMAIL_REGEXP.match?('[email protected]')
=> true
irb(main):004> URI::MailTo::EMAIL_REGEXP.match?('[email protected]')
=> false
irb(main):005> URI::MailTo::EMAIL_REGEXP.match?('[email protected]')
=> false

Railsガイドでも、 このEMAIL_REGEXPを用いてemailのバリデーションを行う方法を以下のように紹介しています。

validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }

URI::MailTo::EMAIL_REGEXPを使うメリット

TechRachoの記事によると、URI::MailTo::EMAIL_REGEXPの正規表現はHTML規格書から持ってきているため、 URI::MailTo::EMAIL_REGEXPを使ったバリデーションはブラウザがinput type="email"で行うバリデーションと一致するというメリットがあります。

余談

URI::MailTo::EMAIL_REGEXPは、 Rubyリファレンスマニュアルにも Ruby標準ライブラリリファレンスにも、実は記載されていません。 ですので、URI::MailTo::EMAIL_REGEXPを利用するのは少々裏技的な側面があるのかもしれません。 ただ、上述の通り、Railsガイドや記事で取り上げられるぐらいに認知されていますので、利用しても大丈夫なのではないかと思います。

0
Raw
https://www.techtips.page/en/comments/331