Regex для проверки адреса сайта в ASP.NET - PullRequest
0 голосов
/ 13 апреля 2011

Когда я использую валидатор регулярных выражений на странице со следующим регулярным выражением:

<asp:RegularExpressionValidator ID="regexWebsiteValidator" runat="server" ControlToValidate="ctlWS" ValidationExpression="(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?" ErrorMessage="Invalid Website Address!" />

и введите http://www,google.com в текстовое поле, проверка завершается неудачно, как и ожидалось.

Если я использую то же регулярное выражение, но пытаюсь сопоставить его с помощью Regex.Match, оно проходит.Может кто-нибудь сказать мне, что я делаю не так?

string strRegex = @"(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?";
bool b = System.Text.RegularExpressions.Regex.Match("http://www,google.com", strRegex).Success;

b - это true!

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Во-первых, вы не привязываете выражение, используя ^(regex goes here)$.Здесь происходит то, что он успешно соответствует части "google.com".Элемент управления RegularExpressionValidator , вероятно, добавляет эти якоря неявным образом - я не знаю ничего, потому что никогда не использую эти вещи.

Чтобы помочь вам в дальнейшей отладке, используйте Match.Valueсвойство, чтобы вы могли точно видеть, что сопоставляется.

Что еще более важно, не использует регулярные выражения для проверки URL .В .NET уже есть класс Uri.Используйте это Parse метод.

0 голосов
/ 13 апреля 2011

Я не эксперт по Regex, как ни крути, но похоже, что вы не избегаете косых черт в своей переменной strRegex, поскольку у вас есть знак @ в начале объявления

Попробуйте что-то вроде:

string strRegex = @"(http(s)?://)?([\\w-]+\\.)+[\\w-]+(/[\\w- ;,./?%&=]*)?";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...