电子邮件 ID 的正则表达式检查失败
Regular expression check for email ID fails
我从 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 class 中添加 _
也将允许 _
在 @
.
之前出现
仅仅断言是不够的,我们必须添加真正的字符(即实际匹配下划线符号的模式)。别担心,lookbehind + @
之前存在的字符 class 中的 \w
会为您完成。
这是因为你的正则表达式中有这个东西
(?<=[0-9a-z])@
在“@”之前明确要求一个字母或一个数字。
最好使用 Microsoft EmailAddress Validation 属性来验证电子邮件地址而不是 Regex。或者使用此功能在服务器端验证电子邮件地址。
public bool IsValid(string emailaddress)
{
try
{
MailAddress m = new MailAddress(emailaddress);
return true;
}
catch (FormatException)
{
return false;
}
}
这是我正在使用的:
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])\])$");
效果很好
你可以使用这个:"\w+([-+.']\w+)@\w+([-.]\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}))$");
}
我从 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 class 中添加 _
也将允许 _
在 @
.
仅仅断言是不够的,我们必须添加真正的字符(即实际匹配下划线符号的模式)。别担心,lookbehind + @
之前存在的字符 class 中的 \w
会为您完成。
这是因为你的正则表达式中有这个东西
(?<=[0-9a-z])@
在“@”之前明确要求一个字母或一个数字。
最好使用 Microsoft EmailAddress Validation 属性来验证电子邮件地址而不是 Regex。或者使用此功能在服务器端验证电子邮件地址。
public bool IsValid(string emailaddress)
{
try
{
MailAddress m = new MailAddress(emailaddress);
return true;
}
catch (FormatException)
{
return false;
}
}
这是我正在使用的:
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])\])$");
效果很好
你可以使用这个:"\w+([-+.']\w+)@\w+([-.]\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}))$");
}