7

Какое регулярное выражение хорошо подходит для поиска URL?

1

У меня есть поле ввода, которое должно обнаруживать URL и извлекать данные. На данный момент я использую следующий регулярное выражение:

var urlR = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)
           (?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url = content.match(urlR);

Но возникла проблема: когда я ввожу URL, например, www.google.com, оно не срабатывает, тогда как для http://www.google.com все работает корректно.

Я не очень хорошо разбираюсь в регулярных выражениях. Можете помочь мне решить эту проблему?

2 ответ(ов)

10

Если вам нужно убедиться, что URL начинается с HTTP или HTTPS, вы можете использовать следующий регулярное выражение:

https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

Если же вам не требуется наличие протокола HTTP, то используйте такое выражение:

[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

Попробуйте эти регулярные выражения на сайтах вроде http://regexr.com?37i6s для более строгой проверки или http://regexr.com/3e6m0 для менее строгой версии.

Вот пример реализации на JavaScript:

const expression = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi;
const regex = new RegExp(expression);
const t = 'www.google.com';

if (t.match(regex)) {
  alert("Успешное совпадение");
} else {
  alert("Совпадений нет");
}

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

0

Я пытался собрать немного кода на JavaScript для валидации доменного имени (например, google.com) и, если оно проходит проверку, активировать кнопку отправки. Решил поделиться своим кодом для тех, кто хочет сделать что-то похожее. Код ожидает доменное имя без префиксов http:// или www. Скрипт использует упрощенное регулярное выражение для сопоставления доменов, которое не сильно строгие по отношению к ложным TLD.

Вот ссылка на jsFiddle: http://jsfiddle.net/nMVDS/1/

$(function () {
  $('#whitelist_add').keyup(function () {
    if ($(this).val() == '') { // Проверяем, введен ли текст
        // Если в поле ввода нет текста, отключаем кнопку
        $('.whitelistCheck').attr('disabled', 'disabled');
    } else {
        // Регулярное выражение для доменного имени
        var regex = new RegExp("^([0-9A-Za-z-\\.@:%_\\+~#=]+)+((\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\?(.)*)?");
        if (regex.test($(this).val())) {
            // Домен выглядит корректно
            $('.whitelistCheck').removeAttr('disabled');
        } else {
            // Домен не корректен
            $('.whitelistCheck').attr('disabled', 'disabled');
        }
    }
  });
});

HTML ФОРМА:

<form action="domain_management.php" method="get">
    <input type="text" name="whitelist_add" id="whitelist_add" placeholder="domain.com">
    <button type="submit" class="btn btn-success whitelistCheck" disabled='disabled'>Добавить в белый список</button>
</form>

Надеюсь, это поможет кому-то с аналогичной задачей! Если у вас есть вопросы или предложения, пишите в комментариях.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь