Мне нужно проверить поле, где пользователь вводит URL-адреса. Правила:
Действительные примеры входного текста:
Некоторые недопустимые примеры:
Это мое регулярное выражение, но оно не работает должным образом:
/(^([\S]https?:\/\/)\w+(?:\.\w+)*\.\w{2,})$*/i
Ваше текущее регулярное выражение неверно, поскольку оно принимает любой символ без пробелов до http
когда вы используете [\S]https
в начале регулярного выражения.
Я рекомендую использовать комбинацию функций Array
вместе с этим регулярным выражением, чтобы убедиться, что все введенные URL-адреса верны.
Сначала разделите входное значение на запятую и получите массив URL:
var urls = document.getElementById("urls").value.split(",");
urls = urls.map(u => u.trim()).filter(v => v !== '');
Затем проверьте, что все URL-адреса соответствуют /^https?:\/\/(\w+)\.\[az\]{2,3}$/
regex
let valid = urls.every(url => url.match(/^https?:\/\/(\w+)\.[a-z]{2,3}$/));
Демо - версия:
document.getElementById("urls").onchange = function() {
var urls = document.getElementById("urls").value.split(",");
urls = urls.map(u => u.trim()).filter(v => v !== '');
console.log(urls);
let valid = urls.every(url => url.match(/^https?:\/\/(\w+)\.[a-z]{2,3}$/) );
console.log(valid);
}
<input id="urls" />
Вы можете попробовать что-то вроде этого:
^(?:https?:\/\/\w+\.\w+,?)*$
Это довольно просто и не предлагает обширной проверки URL-адресов, например, например, опечатки доменов верхнего уровня (.com vs.cmo).
Просто https?:\/\/\w+\.\w+,?
свой шаблон https?:\/\/\w+\.\w+,?
и рекурсия , (?1)
что позволяет в случае необходимости для дополнительной запятой ,
.
^(https?:\/\/\w+\.\w+,?)*$
\S
в[\S]https
? Вы соответствуете любому непробельному символу, но я думаю, что http будет началом строки. И вдобавок ко всему, вы пытаетесь захватить это.