电子邮件ID的正则表达式检查失败
本文关键字:检查 失败 正则表达式 ID 电子邮件 | 更新日期: 2023-09-27 18:00:52
我从MSDN获得了电子邮件ID的正则表达式检查。但当_和@相继出现时,它就失败了。
表达式:
@"^(?("")("".+?(?<!'')""@)|(([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]))$",
示例:check_@hotmail.com失败,即使它是一个有效的ID。
我需要在哪里更改字符串,它看起来很乱,我不明白。
将正则表达式中的(?<=[0-9a-z])@
更改为(?<=[0-9a-z_])@
(?<=[0-9a-z])@
断言匹配@
必须在0-9
或a-z
之前。
因此,通过在char类中添加_
,也将允许_
出现在@
之前。
断言还不够,我们必须添加真正的字符(即实际匹配下划线符号的模式(。别担心,在lookbehind + @
之前存在的char类中的'w
会为您执行此操作。
这就是我正在使用的:
mRegex = new Regex(@"^([a-zA-Z0-9_'-])([a-zA-Z0-9_'-'.]*)@('[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])'.){3}|((([a-zA-Z0-9'-]+)'.)+))([a-zA-Z]{2,}|(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])'])$");
它工作良好
这是因为正则表达式中的这件事
(?<=[0-9a-z])@
明确要求在"@"之前有一个字母或数字。
最好使用Microsoft EmailAddress Validation属性来验证电子邮件地址,而不是Regex。或者使用此功能验证服务器端的电子邮件地址。
public bool IsValid(string emailaddress)
{
try
{
MailAddress m = new MailAddress(emailaddress);
return true;
}
catch (FormatException)
{
return false;
}
}
您可以使用以下命令:"''w+([-+.']''w+(@''w+。
是的,你是对的,它在windows Phone 8中还不可用。您可以使用以下内容来验证电子邮件:
using System;
using System.Text.RegularExpressions;
public static bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn,
@"^['w!#$%&'*+'-/=?'^_`{|}~]+('.['w!#$%&'*+'-/=?'^_`{|}~]+)*"
+ "@"
+ @"(((['-'w]+'.)+[a-zA-Z]{2,4})|(([0-9]{1,3}'.){3}[0-9]{1,3}))$");
}