#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> не был необходим для моей реализации.