验证ASP.. NET MVC模型使用regulareexpression attribute只包含一个电子邮件地址

本文关键字:attribute 包含一 电子邮件地址 regulareexpression NET ASP MVC 模型 验证 | 更新日期: 2023-09-27 18:02:42

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

  • abc@abc.com(真正的)
  • abc@abc.com; def@abc.com (False)
  • abc@abc.com, def@abc.com (False)
  • abc@abc.com def@abc.com (False)
  • abc@abc.com; def@abc.com; ghi@abc.com (False)

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

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

模型验证使用System.ComponentModel.DataAnnotations.RegularExpressionAttribute。例子:

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

验证ASP.. NET MVC模型使用regulareexpression attribute只包含一个电子邮件地址

如果您不想验证电子邮件地址,那么请忘记Regex语句。这是用于高级模式匹配的,您所要做的就是查找几个字符。

使用IndexOfAny查找这些字符的首次出现。如果找到了,说明你有多封邮件。(假设字符串末尾没有分隔符,后面也没有电子邮件地址)

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

或者使用String.SplitRemoveEmptyEntries选项来处理多余的分隔符。

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