Регулярное выражение, которое проверяет веб-адрес и соответствует пустой строке? - PullRequest
3 голосов
/ 26 февраля 2009

Текущее выражение проверяет веб-адрес (HTTP), как мне изменить его так, чтобы пустая строка также соответствовала?

(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?

Ответы [ 3 ]

5 голосов
/ 27 февраля 2009

Если вы хотите изменить выражение, чтобы оно соответствовало или полностью пустой строке или полному URL, вам нужно будет использовать метасимволы якоря ^ и $ (которые соответствуют началу и конец строки соответственно).

^(|https?:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)$

Как уже отмечалось, вы можете немного упростить соответствие для протокола, поэтому я включил это и для вас.

Хотя, если вы используете это выражение из программы или скрипта, вам может быть проще использовать собственные средства проверки языков, если ввод пуст.

// in no particular language...
if input.length > 0 then
    if input matches <regex> then
        input is a URL
    else
        input is invalid
else
    input is empty
0 голосов
/ 26 февраля 2009

Expr?, где Expr - ваш URL-сопоставитель. Точно так же, как я бы для http и https: https?. ? известен как квантификатор - вы можете посмотреть его. От Википедия :

? Знак вопроса указывает на наличие нуля или одного из предшествующих элементов.

0 голосов
/ 26 февраля 2009

Поместите все выражение в круглые скобки и отметьте его как необязательный (квантификатор «?», без или одно повторение):

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