Создание небольшого приложения, которое проверяет, содержит ли строка URL-адрес или нет

#javascript #function

Вопрос:

Я создаю небольшое приложение, которое проверяет, содержат ли значения из текстовой области URL-адреса или нет.

Вот мой код:

 let text = document.getElementsByTagName('textarea')[0].value
let urls= text.toLowerCase().split(' ').filter(check)
function check(str){
                return str.startsWith('www.');
                return str.startsWith("http");
            }
console.log(urls)
//It will only check the value starts with 'www.' and won't check value starts with 'http'. 
 

Когда я переключаюсь последовательности и поместить return str.startsWith("http"); на первых порах, это не проверить значение начинается с ‘на www.’ . Хотя это не большая проблема, и я мог бы определить другую функцию, я просто любопытно, почему это не работает и есть некоторые способы, которые я мог бы сделать это в одной функции или только одной строки.

Спасибо за помощь.

Комментарии:

1. С return вами выйдите из функции сразу же. Вам нужно использовать if / else операторы.

2. Похоже, вы ищете логический оператор ИЛИ . Используйте только одно return утверждение.

Ответ №1:

Это должно сработать. Просто добавлен оператор OR.

Важное примечание: Это неправильный способ проверить, является ли строка допустимым URL-адресом или нет. Вы должны проверить http(ы)://, точку(.) , расширение домена, пробелы и, возможно, многое другое.

 let text = document.getElementsByTagName('textarea')[0].value
let urls = text.toLowerCase().split(' ').filter(check)

function check(str) {
  if (str.startsWith('www.') || str.startsWith("http"))
    return str;
}
console.log(urls) 

Комментарии:

1. Это работает довольно хорошо, но есть ли какие-то способы, которыми я мог бы вставить массив для проверки. Вот так: let url = ['http','www','htttps']; if (str.startsWith(url)){}; я знаю, что это не работает, есть ли способ, которым я мог бы использовать массив, чтобы сделать это без использования цикла for. Большое вам спасибо, что нашли время ответить на мой вопрос.

2. Да, вы можете легко проверить, используя массив. Просто пройдите по массиву и проверьте состояние.

3. Значит, я должен использовать цикл for?

4. Да, проверка функции(str) { для(пусть urlItem url) { если (str.начинается с(urlItem)) возвращает str; } }

5. Пожалуйста. В этом случае нет ничего плохого в использовании цикла. Это временная сложность O(n). Честно говоря, временная сложность не имеет значения, когда в массиве всего несколько элементов. Если вы удовлетворены ответом, пожалуйста, отметьте ответ как «принято».