我有一个ASP.NET网络表单,我可以在其中输入电子邮件地址。
我需要使用以下模式验证具有可接受电子邮件地址的字段:
xxx@home.co.uk
xxx@home.com
xxx@homegroup.com
答案 0 :(得分:7)
验证这一点的正则表达式是:
^[A-Z0-9._%+-]+((@home\.co\.uk)|(@home\.com)|(@homegroup\.com))$
C#样本:
string emailAddress = "jim@home.com";
string pattern = @"^[A-Z0-9._%+-]+((@home\.co\.uk)|(@home\.com)|(@homegroup\.com))$";
if (Regex.IsMatch(emailAddress, pattern, RegexOptions.IgnoreCase))
{
// email address is valid
}
VB示例:
Dim emailAddress As String = "jim@home.com"
Dim pattern As String = "^[A-Z0-9._%+-]+((@home\.co\.uk)|(@home\.com)|(@homegroup\.com))$";
If Regex.IsMatch(emailAddress, pattern, RegexOptions.IgnoreCase) Then
' email address is valid
End If
答案 1 :(得分:6)
以下是我使用System.Net.Mail.MailAddress
进行验证的方法:
bool valid = true;
try
{
MailAddress address = new MailAddress(email);
}
catch(FormatException)
{
valid = false;
}
if(!(email.EndsWith("@home.co.uk") ||
email.EndsWith("@home.com") ||
email.EndsWith("@homegroup.com")))
{
valid = false;
}
return valid;
MailAddress
首先验证它是有效的电子邮件地址。然后其余的验证它以您需要的目的地结束。对我来说,这比每个看起来笨拙的正则表达式更容易理解。它可能不像正则表达式那样高效,但听起来并不像是在循环中验证它们中的一堆......在网页上一次只有一个
答案 2 :(得分:4)
根据您使用的ASP.NET版本,您可以在“验证”下的工具箱中使用其中一个表单验证控件。这可能比回发后设置自己的逻辑更可取。有几种类型可以拖动到表单并与控件关联,您也可以自定义错误消息和定位。
有几种类型可以使它成为必需字段或确保它在一定范围内,但您可能需要正则表达式验证器。您可以使用已经显示的表达式之一,或者我认为Visual Studio可能会提供一个示例电子邮件地址。
答案 3 :(得分:2)
答案 4 :(得分:1)
我第二次使用正则表达式,但帕特里克的正则表达式不起作用(错误的交替)。尝试:
[A-Z0-9._%+-]+@home(\.co\.uk|(group)?\.com)
并且不要忘记在源代码中使用的字符串中转义反斜杠,具体取决于所使用的语言。
"[A-Z0-9._%+-]+@home(\\.co\\.uk|(group)?\\.com)"
答案 5 :(得分:1)
以下是来自 RFC 2822 的官方正则表达式,它将匹配任何正确的电子邮件地址:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
答案 6 :(得分:0)
试试这个:
Regex matcher = new Regex(@"([a-zA-Z0-9_\-\.]+)\@((home\.co\.uk)|(home\.com)|(homegroup\.com))");
if(matcher.IsMatch(theEmailAddressToCheck))
{
//Allow it
}
else
{
//Don't allow it
}
您还需要将Regex名称空间添加到您的类中:
using System.Text.RegularExpressions;
答案 7 :(得分:0)
执行此操作的扩展方法是:
public static bool ValidEmail(this string email)
{
var emailregex = new Regex(@"[A-Za-z0-9._%-]+(@home\.co\.uk$)|(@home\.com$)|(@homegroup\.com$)");
var match = emailregex.Match(email);
return match.Success;
}
答案 8 :(得分:0)
在ValidateExpression属性中使用带有正则表达式的<asp:RegularExpressionValidator ../>
。
答案 9 :(得分:-1)
C#中更好的解决方案是:
string emailAddress = "someone@home.co.uk";
if (Regex.IsMatch(emailAddress, @"^[A-Z0-9._%+-]+@home(?:\.co\.uk|(?:group)?\.com)$", RegexOptions.IgnoreCase))
{
// email address is valid
}
当然,要确保所有电子邮件地址都通过,您可以使用更全面的表达方式:
string emailAddress = "someone@home.co.uk";
if (Regex.IsMatch(emailAddress, @"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@home(?:\.co\.uk|(?:group)?\.com)$", RegexOptions.IgnoreCase))
{
// email address is valid
}