Регулярное выражение для соответствия IP-адресу + подстановочный знак - PullRequest
6 голосов
/ 08 июня 2010

Я пытаюсь использовать RegularexpressionValidator для сопоставления IP-адреса (с возможными подстановочными знаками) для системы фильтрации IP.

Я использую следующее регулярное выражение:

"([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}"

Что отлично работает при запуске его в LINQPad с Regex.Matches, но, похоже, не работает, когда я использую валидатор.

У кого-нибудь есть предложения относительно лучшего Regex или почему он будет работать в тесте, но не на месте?

Cheers, Ed

Ответы [ 5 ]

5 голосов
/ 08 июня 2010

Это: \\.|\\*\\. выглядит как хитрый бит. Сделайте это вместо:

@"^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$"

И принимать только 0-255 (спасибо, apoorv020 ):

^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$
3 голосов
/ 08 июня 2010

asp:RegularExpressionValidator не требует от вас двойной обратной косой черты. Вам следует попробовать:

([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}

2 голосов
/ 08 июня 2010

[0-9] {1,3} разрешит IP-адреса вида 999.999.999.999. Ваш диапазон IP-адресов должен позволять только 0-255.
Заменить все вхождения [0-9] {1,3} на ([0-9] {1,2}) | (1 [0-9] {2,2}) | (2 [0-4] [0-9]) | (25 [0-5]) < бр /> Это кажется мне очень сложным, и, возможно, есть более эффективные способы сделать это, но на первый взгляд кажется правильным.

1 голос
/ 08 июня 2010

Как насчет начальных и конечных строковых символов в выражении

^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$
0 голосов
/ 08 июня 2010

Мой ответ является общим для .NET, а не RegularExpressionValidator -специфичным.

Строка регулярного выражения для сопоставления IP-адресов (используйте ExplicitCapture, чтобы избежать бесполезного захвата и сохранять краткость RE):

"\\b0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})(\\.0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})){3}\\b"

В зависимости от конкретного случая использования вы можете добавить соответствующие анкеры, то есть \A или ^ в начале и \Z или $ в конце. Тогда вы можете удалить требование к границам слов: \b.

(Помните о удвоении \ внутри строки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...