URL, начинающиеся с http: // или https: //, разделенные запятой, без пробелов

1

Мне нужно проверить поле, где пользователь вводит URL-адреса. Правила:

  • Без пробелов;
  • Разделяется запятой;
  • Каждый URL-адрес должен начинаться с http://или https://

Действительные примеры входного текста:

Некоторые недопустимые примеры:

Это мое регулярное выражение, но оно не работает должным образом:

/(^([\S]https?:\/\/)\w+(?:\.\w+)*\.\w{2,})$*/i
  • 0
    Что не работает должным образом?
  • 0
    Что вы пытаетесь сопоставить с \S в [\S]https ? Вы соответствуете любому непробельному символу, но я думаю, что http будет началом строки. И вдобавок ко всему, вы пытаетесь захватить это.
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Ваше текущее регулярное выражение неверно, поскольку оно принимает любой символ без пробелов до 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" />
  • 0
    Спасибо @ chŝdk. Кажется, работает в большинстве случаев. Но терпит неудачу, когда позволяет пробелы. Я думаю, что небольшой корректировки достаточно. ;)
  • 0
    @VitorEduardodaSilva Пожалуйста, посмотрите на мой отредактированный код, используя это регулярное выражение .
1

Вы можете попробовать что-то вроде этого:

^(?:https?:\/\/\w+\.\w+,?)*$

Это довольно просто и не предлагает обширной проверки URL-адресов, например, например, опечатки доменов верхнего уровня (.com vs.cmo).

Просто https?:\/\/\w+\.\w+,? свой шаблон https?:\/\/\w+\.\w+,? и рекурсия (?1), что позволяет в случае необходимости для дополнительной запятой ,.

Смотрите здесь

  • 0
    На мой взгляд, это самое лучшее. Но этот аромат не поддерживается JS.
  • 0
    Ах, ты прав. На самом деле вам даже не нужно повторять первую группу захвата - у меня она была там, когда что-то тестировала, и забыл удалить ее позже. Вы можете использовать ^(https?:\/\/\w+\.\w+,?)*$

Ещё вопросы

Сообщество Overcoder
Наверх
Меню