使用RegularExpressionAttribute验证ASP.NET MVC模型仅包含单个电子邮件地址

时间:2014-05-09 23:43:32

标签: c# regex

我想验证只包含一个电子邮件地址的字符串。字符串值来自ASP.NET MVC文本框。输入文本可以包含由逗号,分号或空格分隔的多个电子邮件地址。例子:

  • abc@abc.com(True)
  • abc@abc.com; def@abc.com(错误)
  • abc @ abc.com,def @ abc.com(False)
  • abc@abc.com def@abc.com(错误)
  • abc@abc.com; def@abc.com; ghi@abc.com(错误)

以下表达式在我的情况下不起作用:

^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}(?!;|,)$

使用System.ComponentModel.DataAnnotations.RegularExpressionAttribute完成模型验证。例如:

[RegularExpression(@"expr")]
public string SingleEmailAddress { get; set; }

1 个答案:

答案 0 :(得分:1)

如果您没有尝试验证电子邮件地址,请忘记Regex声明。这是高级模式匹配,你要做的就是寻找几个字符。

使用IndexOfAny查找任何这些字符的第一个匹配项。如果找到了,您会收到多封电子邮件。 (假设字符串末尾没有分隔符,后面没有电子邮件地址。)

var hasMultipleEmails = !String.IsNullOrWhiteSpace(input)
                            && input.IndexOfAny(new[] { ',', ';', ' ' }) > -1;

或者使用String.SplitRemoveEmptyEntries选项来处理迷路分隔符。

var hasMultipleEmails = input.Split(new[] { ',', ';', ' ' },
                            StringSplitOptions.RemoveEmptyEntries).Count() > 1;