【问题标题】:C# Regex Compatibility Issue (.NET 3.5 vs .Net 2.0)C# 正则表达式兼容性问题(.NET 3.5 与 .Net 2.0)
【发布时间】:2010-11-30 14:03:50
【问题描述】:

我在运行 .NET 3.5 的开发机器上有以下正则表达式,它按设计工作。但是,当它部署到我们的测试环境(运行 .NET 2.0)时,它不能正常工作并且似乎总是返回 false。有谁知道罪魁祸首可能是什么?谢谢

using System.Text.RegularExpressions;

protected void emailContactCheck(object source, ServerValidateEventArgs args)
{
  string[] allContacts = this.Contacts.InnerText.ToString().Split(";,".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  Regex rx = new Regex(@"^(([^<>()[\]\\.,;:\s@\""]+"
                    + @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
                    + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
                    + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
                    + @"[a-zA-Z]{2,}))$", RegexOptions.IgnoreCase);
  foreach (String contact in allContacts)
  {
    if (!rx.IsMatch(contact.Trim()))
    {
      args.IsValid = false;
      return;
    }
  }
  args.IsValid = true;
}

【问题讨论】:

  • 你确定测试和开发环境的数据是一样的吗?我不知道 this.Contacts 包含什么,也无法绝对确定它们是等价的。
  • 找到一些失败的样本数据,我们应该能够提供帮助。
  • 当您只需要 "" 时,您正在使用 \"" 转义引号。去掉反斜杠可能不会解决你的问题,但它会让 SO 的语法高亮正常工作,让我们更容易阅读代码。

标签: c# asp.net regex validation email-validation


【解决方案1】:

根据regular-expressions.info,.NET 2.0 和 3.x 之间的正则表达式支持没有区别,所以问题可能不在于正则表达式引擎。

【讨论】:

    【解决方案2】:

    我也会尝试将您的开发机器的 .Net 版本设置为 .Net 2.0。可以在项目构建属性上完成。您应该始终使用与您的测试/生产系统相同的版本。

    然后您可以尝试检查是否可以在运行 .Net 2.0 的开发机器上重现该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      相关资源
      最近更新 更多