こんにちは、窪田です。
正規表現でメールアドレスをチェックしたいという状況は、エンジニアとして働いている以上、頻繁に起きるのではないでしょうか。
今回はメールアドレスの形式に当てはまる正規表現について解説したいと思います。
目次
正規表現とは
正規表現とは、「文字列を一つの形式で表現するための方法」です。
正規表現を使用することで、いくつかの文字列を一つの文字列で表すことができます。
例えば、メールアドレスはそれぞれが異なる文字列ですが、メールアドレスの形式は決まっているので正規表現を使用することで、文字列がメールアドレスであるか、そうでないかを判断できます。
メールアドレスの正規表現
^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@([a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,}$
これがメールアドレスの形式に当てはまる正規表現です。
この正規表現について、少し解説してみます。
正規表現の解説
メールアドレスは@以前のローカル部分と@以降のドメイン部分に分けられるので、正規表現も同じようにローカル部分とドメイン部分に分けてみます。
ローカル部分
^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@
ドメイン部分
([a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,}$
ローカル部分の正規表現の解説
^
文字列の先頭を意味します。
[a-zA-Z0-9_\-]+
英数字、アンダーバー(_)、ハイフン(-)のうち、1回以上繰り返されることを意味します。
ピリオド(.)はメールアドレスの先頭に設定できないため、ピリオドは含めません。
メールアドレスに使用できる記号を増やした場合は、[]の中に追記してください。
この際、ハイフン(-)のように正規表現で特殊な意味を持つ記号は「\記号」としてエスケープする必要があります。
(\.[a-zA-Z0-9_\-]+)*
これは、ピリオド(.)と、英数字、アンダーバー(_)、ハイフン(-)のうち1回以上繰り返されるグループが、0回以上繰り返されることを意味します。
ピリオドは連続して使用することができず、ローカル部分の末尾にも使用できないため、このような複雑な正規表現になっています。
この正規表現により、a.@~やa..@~のようなメールアドレスは認めず、a@~やa.b@~を許可しています。
^[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+)*@でチェックした場合
a.@~やa..@~のようなメールアドレスは形式が正しくない判定になっている。
^[a-zA-Z0-9_\-]+([a-zA-Z0-9_\-\.]+)*@でチェックした場合
a.@~やa..@~のようなメールアドレスも形式が正しい判定になってしまう。
@
これは@が1つ一致するという意味です。
ドメイン部分の正規表現の解説
([a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]\.)+
英数字と、英数字、ハイフン(-)のうち0回以上繰り返しと、英数字と、ピリオド(.)のグループが、1回以上繰り返されることを意味します。
ハイフンはラベル(ドメインの.で区切られた文字列)の先頭と末尾には使用できないため、このような正規表現になっています。
[a-zA-Z]{2,}
英字が2回以上繰り返されることを意味します。
$
文字列の末尾を意味します。
まとめ
今回はメールアドレスの正規表現について解説してみました。
正規表現を日本語で説明するのは非常に難しかったので、記事を読んでくださった方に理解していただけたか不安ですが、何かの参考になっていれば幸いです。
正規表現でメールアドレスの形式をチェックする際には、今回紹介した正規表現を使ってみてください。