Проверка регулярного выражения URL: отрицать, если в URL нет 3 W - PullRequest
0 голосов
/ 03 марта 2012

У меня есть это регулярное выражение для проверки URL: ^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$^.Это регулярное выражение работает гладко, но я хочу добавить ограничение на количество символов W в начале URL-адреса.

Если пользователь пытается сохранить URL-адрес не более 3 символов W (например, ww), регулярное выражениебудет отрицать сохранение.Тот же результат также произойдет, если пользователь попытается сохранить URL-адрес более чем с 3 W (например, wwww).

Как решить эту проблему?

Заранее спасибо.

1 Ответ

2 голосов
/ 03 марта 2012

Этот вид фильтрации не очень подходит для регулярных выражений.

Проблема в том, что правила того, что должно быть «совпадением», на самом деле довольно сложны. По сути, правила таковы:

Подберите что-нибудь, если оно имеет:

  • начало текста
  • либо:
    • ровно три w символа, за которыми следует точка ИЛИ
    • любые буквенно-цифровые символы или точки, повторяемые любое количество раз, за ​​которыми следует точка
      • если все эти символы не являются w символами, но количество символов не равно трем (плюс точка)
  • два или три алфавитно-цифровых символа
  • конец текста

, если все эти символы не являются символами w ... часть - сложная часть. Regex не очень хорошо подходит для этой задачи.


Для "исторических" целей:

Используйте {n}, чтобы повторить часть выражения n раз.

^w{3}\.[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?$

Используйте ?, чтобы сделать часть выражения необязательной.

Круглые скобки являются оператором группировки. «W раз три» и точка перемещаются внутри группы, и группа становится необязательной с помощью оператора ?.

^Guess what? this doesn't work.$
^I tried to delete the answer but I can't until you unaccept it.$

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

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