我从docs检查了电子邮件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 :(得分:3)
将正则表达式中的(?<=[0-9a-z])@
更改为(?<=[0-9a-z_])@
(?<=[0-9a-z])@
断言匹配@
必须以0-9
或a-z
开头。
因此,在char类中添加_
也会允许_
出现在@
之前。
断言只是不够,我们必须添加真实的字符(即实际匹配下划线符号的模式)。别担心,在\w
之前存在的char类中,lookbehind + @
将为您完成。
答案 1 :(得分:1)
这就是我正在使用的:
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])\])$");
工作正常
答案 2 :(得分:0)
正是因为你的正则表达式中的这个东西
public bool IsValid(string emailaddress)
{
try
{
MailAddress m = new MailAddress(emailaddress);
return true;
}
catch (FormatException)
{
return false;
}
}
在“@”之前明确要求字母或数字。
最好使用Microsoft EmailAddress Validation属性来验证电子邮件地址而不是Regex。或者使用此功能验证服务器端的电子邮件地址。
{{1}}
答案 3 :(得分:0)
您可以使用:“\ w +([ - +。'] \ w +) @ \ w +([ - 。] \ w +)。\ w +([ - 。] \ w +) *”。我希望这会奏效。
答案 4 :(得分:0)
是的,你是对的,它还没有在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}))$");
}