@Spellman30

Как распознать ссылку в строке?

Речь о поведении строки поиска на сайте, сходном с тем, что делает адресная строка браузера. Если ссылка, то переходит по ней, если просто текст, то осуществляет поиск в выбранной системе поиска. Как подобное реализовать на странице сайта? В голову приходит только перебирать строку циклом посимвольно, и в случае обнаружения доменного окончания переходить по ссылке. Но для сайта такое не "тяжеловато"? Какие есть ещё способы?
  • Вопрос задан
  • 2265 просмотров
Решения вопроса 1
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега JavaScript
Руководитель frontend направления, предприниматель
Ага, я вроде понял.

У ссылки есть некоторые атрибуты, опираясь на которые ты можешь ее распознать. Среди них:
1. Протокол: http\s (в ответах есть пример)
2. Домен + доменная зона (вот тут уже посложней, так как доменных зон овердомного)

Проверять по доменной зоне и по принципам имя.зона не рекомендую. Из-за такого подхода я до сих пор держу пару ящиков с классово-верной зоной, чтобы иметь возможность входить в сервисы, которые не удосужились сделать норм проверку.

Поисковая строка, к слову, тоже не идеальна, ибо работает по подобному принципу и легко можно улететь на какой-нибудь дот.com. Впрочем, никто не запрещает делать тебе плохой интерфейс, «ведь все так делают».

Собсно, тебе надо собрать регулярку, которая будет проверять введенную пользователем строку во время ввода или по событию, скажем, отправки формы, это уже зависит от того, как ты реализовал, по условию, которое тебя устраивает. Ты можешь реализовать это от обратного принципа, собрав примеры ссылок, которые ты хочешь отловить и собрать под них регулярку. Поможет тебе в этом этот сервис.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Единственный 100% работающий способ проверить, а ссылка ли в строке - это попробовать ее распарсить как ссылку:
function isURL(str) {
  try {
    new URL(str);
    return true;
  } catch {
    return false;
  }
}

console.log(isURL('http://')); // false
console.log(isURL('http://site.ru')); // true

И не слушайте тех кто предлагает Вам регулярки. Регулярки это очень дорого как по вычислительным ресурсам, так и по поддержке кода. Люди пользуются регулярками только в 2х случаях:
1. у них нет времени сделать нормально, но потом они намерены это переделать
2. они макаки не способные сделать нормально
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Самое простое - это:
1. Проверять цифру (примеры: 1234, 755676555) на id-шник
2. Прверять "склеенное" слово хотя бы с одним слэшом (примеры: "текст/текст", "user/profile") на линк
...на вхождение в sitemap.xml после того, как обе сравниваемые строки (проверяемая и содержащаяся в файле) будут приведены к нижнему регистру.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы