Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Регулярное выражение не работает после отладки

Автор вопроса: CommunityОтветов: 2

У меня есть веб-сайт ASP.NET с текстовым полем проверки регулярного выражения.

Я изменил выражение в свойстве проверки регулярного выражения "выражение проверки", и после компиляции (перестроения) и запуска ИЗМЕНЕНИЯ проверки не отражаются.

Предыдущая проверка работает нормально, но измененная проверка не работает.

Пожалуйста помогите!

изменить:

Первый код:

([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com))

Второй код:

@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))"
  • Возможно, вам потребуется опубликовать свои регулярные выражения и, возможно, код, который вы используете для инициализации ваших валидаторов. Jay S 10.07.2009
  • Вы работаете локально в VS или проверяете опубликованный сайт? Если последнее, есть вероятность, что вы не опубликовали изменения? Если это первое, попробуйте закрыть браузер и снова запустить свой сайт. Кроме этого, примеры кода ничем не помогут. Lazarus 10.07.2009
  • Первый код ([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com)|(arg.co.uk)|(arggroup. com)) Второй код @([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\ .co\.uk)|(arggroup\.com)) 10.07.2009
  • Я запускаю vs2008 после сборки и нажимаю на значок ›. IE автоматически приходит, я закрыл и открыл браузер .. NO JOY 10.07.2009
  • ошибочно поставил первый код так же, как второй .. теперь исправьте это в вопросе 10.07.2009

regexvisual-studio-2008visual-studio-express

Ответы

Ответ 1 · Jan Goyvaerts

Предполагая, что ваш "первый код" является буквальным регулярным выражением, вам нужно экранировать дефис в классе символов с помощью обратной косой черты.

Ваш "второй код" представляет собой регулярное выражение, отформатированное как дословная строка С#, которая будет отлично соответствовать адресу электронной почты, такому как [email protected]. В этом регулярном выражении нет ничего плохого.

Вам придется опубликовать код, в котором вы используете это регулярное выражение, если оно не работает так, как вы хотите.

Ответ 2 · рейтинг -1 · Paul Chernoch

В этой части: [a-zA-Z0-9_\-.] вы избегаете дефиса. Правильный способ поставить дефис в классе символов регулярных выражений - это первая позиция (или он думает, что это часть диапазона):

[-a-zA-Z0-9_.]

Затем вы удалили обратную косую черту перед @. В Perl @ будет восприниматься как часть имени списка, но в C# я не уверен, какой эффект он имел бы, чтобы не избежать его.

Убегание периодов также вызывает подозрение. Возможно, вам придется удвоить их: например. \\. Вместо этого для точки я бы использовал класс символов: т. е. [.] Внутри класса символов точка теряет свое особое значение.

Попробуй это:

@"([-a-zA-Z0-9_.]+)\@((base[.]co[.]uk)|(base[.]com)|(group[.]com)|(arg[.]co[.]uk)|(arggroup[.]com))"

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы