C# 如何编写数据注释以检查是否在字符串中找到电子邮件地址并在其上失败

C# 如何编写数据注释以检查是否在字符串中找到电子邮件地址并在其上失败,c#,regex,entity-framework,jquery-validate,unobtrusive-validation,C#,Regex,Entity Framework,Jquery Validate,Unobtrusive Validation,我有以下代码,但它不太工作。。。知道我哪里出错了吗当字符串中有回车符时,它似乎失败了?(参见底部的小提琴) 上下文 人们在写描述并在其中放置电子邮件地址,例如: “你好,我是鲍勃,这是我的电子邮件:example@exampele.com.希望你 祝你在我的聚会上度过愉快的一天。” 我需要检查该字符串,看看是否有电子邮件,然后不允许它被提交。(我在ASP.NETMVC5中使用实体框架和数据注释以及jquery验证……这就是我提到数据注释用法的原因 注意: 我从这里学习了反转技术: 以及此处的电

我有以下代码,但它不太工作。。。知道我哪里出错了吗当字符串中有回车符时,它似乎失败了?(参见底部的小提琴)

上下文

人们在写描述并在其中放置电子邮件地址,例如:

“你好,我是鲍勃,这是我的电子邮件:example@exampele.com.希望你 祝你在我的聚会上度过愉快的一天。”

我需要检查该字符串,看看是否有电子邮件,然后不允许它被提交。(我在ASP.NETMVC5中使用实体框架和数据注释以及jquery验证……这就是我提到数据注释用法的原因

注意:

我从这里学习了反转技术:

以及此处的电子邮件验证:

尝试:

以下字符串:

将显示错误,但不会:

考虑到里面没有电子邮件,这个表达有点不对劲

小提琴:
不工作:
工作:

处理电子邮件:

您是否尝试过类似的方法:

    bool invalid = false;

       public bool IsValidEmail(string strIn)
       {
           invalid = false;
           if (String.IsNullOrEmpty(strIn))
              return false;

           // Use IdnMapping class to convert Unicode domain names. 
           try {
              strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper,
                                    RegexOptions.None, TimeSpan.FromMilliseconds(200));
           }
           catch (RegexMatchTimeoutException) {
             return false;
           }

            if (invalid)
               return false;

           // Return true if strIn is in valid e-mail format. 
           try {
              return Regex.IsMatch(strIn,
                    @"^(?("")("".+?(?<!\\)""@)|(([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]))$",
                    RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
           }
           catch (RegexMatchTimeoutException) {
              return false;
           }
       }

   private string DomainMapper(Match match)
   {
      // IdnMapping class with default property values.
      IdnMapping idn = new IdnMapping();

      string domainName = match.Groups[2].Value;
      try {
         domainName = idn.GetAscii(domainName);
      }
      catch (ArgumentException) {
         invalid = true;
      }
      return match.Groups[1].Value + domainName;
   }

这对您有用吗?

需要用
[\S\S]

[RegularExpression(@"^((?!([\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))))[\S\s])*$", ErrorMessage = "Please do not include an email address in your field description.")]

来源:

我更新了我的OP,看看这是否澄清了我的问题(上下文部分)。我还对标题做了一些调整。所以,我要明确的是,是正则表达式不起作用还是验证?还是两者都起作用?当我在字段中键入电子邮件,然后单击“out”时,会出现错误,如果我删除电子邮件并键入其他内容,则会消除错误(目前情况良好)…但似乎有一个问题,因为它并不总是很好地工作…不确定它是什么,但有一次尝试,回车带来了错误,当我删除回车时,它很好…嗯,奇怪。我不确定。我添加了失败的字符串和新的表达式…我不太确定我做错了什么。抱歉,现在检查..评论把字符串弄乱了
IsValidEmail(emailAddress)
[RegularExpression(@"^((?!([\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))))[\S\s])*$", ErrorMessage = "Please do not include an email address in your field description.")]