Какое регулярное выражение хорошо подходит для поиска URL?
У меня есть поле ввода, которое должно обнаруживать 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 ответ(ов)
Если вам нужно убедиться, что 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 на соответствие вашим требованиям.
Я пытался собрать немного кода на 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>
Надеюсь, это поможет кому-то с аналогичной задачей! Если у вас есть вопросы или предложения, пишите в комментариях.
Как проверить корректность email-адреса в JavaScript?
Проверка соответствия строки регулярному выражению в JS
Как разделить строку с несколькими разделителями в JavaScript?
Экранирование строки для использования в регулярных выражениях JavaScript [duplicate]
Регулярное выражение для замены нескольких пробелов на один пробел