メールアドレスが有効か判定する(RFC規約違反を許可)
MSDN に「文字列が有効な電子メール形式であるかどうかを検証する」 という記事がありますが、この記事のサンプルは RFC規約違反のアドレスを弾くよう実装してます。しかし
hogehoge@i.sopftbank.jp
という iPhone メールのドメインも弾くので、このままでは使えません。
また、RFC規約違反のメールもシステムで管理したいという要件があったため、MSDN のサンプルを少し改造してみました。ドットの繰り返しや@直前の記号、また i.sopftbank.jp というドメインが通るよう、@直後の英数一文字+ドットも許可してます。
// C# using System; using System.Text.RegularExpressions; public class RegexUtilities { public static bool IsValidEmail(string strIn) { // Return true if strIn is in valid e-mail format. return Regex.IsMatch(strIn, @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.)|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z.-_])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-.\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$"); } }
' VB.NET Imports System.Text.RegularExpressions Module RegexUtilities Function IsValidEmail(strIn As String) As Boolean ' Return true if strIn is in valid e-mail format. Return Regex.IsMatch(strIn, _ "^(?("")("".+?""@)|(([0-9a-zA-Z]((\.)|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z.-_])@))" + _ "(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-.\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$") End Function End Module
メアドも突き詰めて調べると、結構奥深いです・・・