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

本文关键字:字符串 电子邮件地址 失败 是否 检查 何编写 一个 注释 数据 | 更新日期: 2023-09-27 17:50:01

我有以下代码,但它不太工作…你知道我哪里做错了吗?当字符串中有回车时似乎会失败?

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

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

"大家好,我是bob,这是我的邮箱:example@exampele.com。希望你祝你在我的派对上玩得愉快。"

我需要检查字符串,看看是否有电子邮件,然后不允许提交。(我在asp.net MVC 5中使用实体框架和数据注释以及jquery验证…这就是为什么我提到数据注释的使用。

注意:

我从这里采用了反转技术:

Jquery验证'password'和& # 39;行政与# 39;不工作

和这里的email验证:

c#中Email验证的最佳正则表达式

尝试:

下面的字符串:

http://pastebin.com/00BE7tUW

将显示错误,而this不会:

http://pastebin.com/i69uxzRf

所以考虑到其中没有电子邮件,这个表达有点问题?

小提琴:
不工作:https://regex101.com/r/zL7xD7/1
工作:https://regex101.com/r/hJ8fJ9/1
使用电子邮件:https://regex101.com/r/dB3cU2/1

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

你试过这样做吗?

    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;
   }

IsValidEmail方法如果字符串包含有效的电子邮件地址,则返回true;如果不包含有效的电子邮件地址,则返回false,但不执行其他操作。

要验证电子邮件地址是否有效,IsValidEmail方法调用正则表达式。将(String, String, MatchEvaluator)方法替换为(@)(.+)$正则表达式模式,将域名与电子邮件地址分开。第三个参数是一个MatchEvaluator委托,它表示处理和替换匹配文本的方法。

然后你可以这样检查电子邮件地址:

IsValidEmail(emailAddress)

这个对你有用吗?

需要替换为['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.")]

source:正则表达式不匹配新行