メールアドレスの検証が扱いにくいテーマであることは誰もが知っています。RFC 全体をエンコードせずに処理する最善の方法については、非常に多くの意見があります。しかし、2009 年以降、IDN の問題はさらに難しくなり、IDN の問題に取り組んでいる人をまだ見たことがありません。
これが私が使ってきたものです:
preg_match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}\z/i)
ほとんどのメール アドレスにはどちらが適していますが、ラテン語以外のメール アドレスと照合する必要がある場合はどうすればよいですか? 例: bob@china.中國、または bob@russia.рф
完全なリストについては、こちらをご覧ください。(リストの一番下にあるすべてのラテン語以外のドメイン拡張子に注意してください。)
この件に関する情報はここで見つけることができます。彼らが言っていることは、これらの新しい文字はマシン レベルでは単に「.xn--fiqz9s」および「.xn--p1ai」として読み取られるということですが、私は 100% ではありません。もちろん。
もしそうなら、それは私のコードで次のようにすることを検討する必要がある唯一の変更を意味しますか? (.travelersinsurance や .sandvikcoromant などのドメイン拡張子の場合)
preg_match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,20}\z/i)
注意: これは、このページの議論とは関係ありません。正規表現を使用して電子メール アドレスを検証する