Проблема совместимости регулярных выражений C# (.NET 3.5 и .Net 2.0)

У меня есть следующее выражение регулярного выражения на машине разработчика, на которой работает .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;
}

person Splashlin    schedule 22.09.2009    source источник
comment
Вы уверены, что в среде тестирования и разработки есть одни и те же данные? Я не знаю, что содержит this.Contacts, и нет никакого способа быть абсолютно уверенным, что они эквивалентны.   -  person David Andres    schedule 23.09.2009
comment
Найдите некоторые образцы данных, которые не работают, и мы сможем помочь.   -  person csharptest.net    schedule 23.09.2009
comment
Вы используете \"", чтобы избежать кавычек, когда вам нужно только "". Избавление от обратной косой черты, вероятно, не решит вашу проблему, но позволит правильной работе подсветки синтаксиса SO, облегчив нам чтение кода.   -  person Alan Moore    schedule 23.09.2009


Ответы (2)


Согласно regular-expressions.info, между .NET нет различий в поддержке регулярных выражений. 2.0 и 3.x, так что проблема, вероятно, не в движке регулярных выражений.

person Tim Pietzcker    schedule 23.09.2009

Я бы также попытался установить версию .Net вашей машины для разработки на .Net 2.0. Это можно сделать в свойствах сборки проекта. Вы всегда должны использовать ту же версию, что и в вашей тестовой/производственной системе.

Затем вы можете попробовать проверить, можете ли вы воспроизвести проблему также на вашей машине разработки, работающей под управлением .Net 2.0.

person Juri    schedule 23.09.2009