只需通过转换为 Ascii 字符以更简单的方式处理 Unicode。这样一来,您所需要的System.Text.RegularExpressions
就是可移植的。
这通过了 MS 页面上的所有给定测试,无法想象它的宽松程度。如果有糟糕的电子邮件通过它没什么大不了的,因为无论如何真正的验证都应该在服务器端。
public static class RegexUtilities
{
/// <summary>
/// Portible version of http://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx
/// More permissive validation for client side.
/// </summary>
/// <param name="strIn"></param>
/// <returns></returns>
public static bool IsValidEmail(string strIn)
{
if (String.IsNullOrEmpty(strIn))
return false;
//Replace all unicode chars with ascii "A"
strIn = Regex.Replace(strIn, "[^\x0d\x0a\x20-\x7e\t]", "A");
// Return true if strIn is in valid e-mail format.
try
{
return Regex.IsMatch(strIn,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
}