Фильтр диапазона C # IP

#c# #asp.net #regex

#c# #asp.net #регулярное выражение

Вопрос:

Я хочу исключить содержимое из моего *.aspx для пользователей в определенном диапазоне IP-адресов.

 string ipRange = @"^12.345.678.(2(4[0-9]|5[0-5]))$";
if (!System.Text.RegularExpressions.Regex.IsMatch(Request.UserHostAddress.ToString(), System.Text.RegularExpressions.Regex.Escape(ipRange))){//BLOCKED CONTENT GOES HERE}
  

Я довольно слаб в регулярных выражениях, поэтому я сжульничал и получил шаблон, используя инструмент IP Range от Google

В этом примере он неэффективно блокирует 12.345.678.254

Чего я не понимаю?

Заранее благодарю!

Комментарии:

1. Возможно, это не имеет значения, но 12.345.678.254 это недопустимый IP-адрес…

2. Почему вы избегаете? Ваш шаблон регулярных выражений в порядке… просто не избегайте этого.

3. @DanBreen 1 за внимание к деталям 🙂

Ответ №1:

Вы не должны избегать регулярного выражения:

 System.Text.RegularExpressions.Regex.Escape(ipRange)
  

должно быть:

 ipRange
  

Если вы экранируете его, все символы становятся буквенными, так что, например, [0-9] больше не соответствует цифре от 0 до 9, а вместо этого соответствует строке, состоящей из пяти символов [ , 0 , - , 9 ] ,,,,,,,,,,,,,,,.

Комментарии:

1. Это сделало это. Спасибо за ответ и объяснение! Я где-то читал, что мне нужен escape для обработки обратной косой черты в моем регулярном выражении. Думаю, <code>.escape()</code> не был необходим для моей реализации.