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

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

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

Ответов (3)

Решение

Если вы хотите изменить выражение, чтобы оно соответствовало либо полностью пустой строке, либо полному 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

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

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

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

? Знак вопроса указывает на то, что предыдущий элемент отсутствует или равен одному.