rubyの標準添付ライブラリである[uri](https://docs.ruby-lang.org/ja/latest/library/uri.html)に存在している[`URI::MailTo::EMAIL_REGEXP`](https://github.com/ruby/ruby/blob/v3_3_5/lib/uri/mailto.rb#L55)は、 ある文字列が規格上Emailアドレスとして適切かどうかのチェックに以下のように利用できます。 ```irb 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?('username@example.com') => true irb(main):004> URI::MailTo::EMAIL_REGEXP.match?('username@-example.com') => false irb(main):005> URI::MailTo::EMAIL_REGEXP.match?('username@.com') => false ``` [Railsガイド](https://railsguides.jp/active_model_basics.html#validations%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB)でも、 このEMAIL_REGEXPを用いてemailのバリデーションを行う方法を以下のように紹介しています。 ```ruby validates :email, format: { with: URI::MailTo::EMAIL_REGEXP } ``` ### URI::MailTo::EMAIL_REGEXPを使うメリット [TechRachoの記事](https://techracho.bpsinc.jp/hachi8833/2024_04_05/140298#comments)によると、`URI::MailTo::EMAIL_REGEXP`の正規表現はHTML規格書から持ってきているため、 `URI::MailTo::EMAIL_REGEXP`を使ったバリデーションはブラウザが`input type="email"`で行うバリデーションと一致するというメリットがあります。 ### 余談 `URI::MailTo::EMAIL_REGEXP`は、 [Rubyリファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/class/URI=3a=3aMailTo.html)にも [Ruby標準ライブラリリファレンス](https://ruby-doc.org/3.3.5/stdlibs/uri/URI/MailTo.html)にも、実は記載されていません。 ですので、`URI::MailTo::EMAIL_REGEXP`を利用するのは少々裏技的な側面があるのかもしれません。 ただ、上述の通り、Railsガイドや記事で取り上げられるぐらいに認知されていますので、利用しても大丈夫なのではないかと思います。