Как определить, есть ли строка в формате URL, используя JavaScript? - PullRequest
17 голосов
/ 09 ноября 2009

Я думаю, что название вопроса, кажется, объясняет все. Я хочу определить, находится ли строка в формате URL или нет с использованием javascript.

Любая помощь приветствуется.

Ответы [ 7 ]

48 голосов
/ 09 ноября 2009

Попробуйте это-

function isUrl(s) {
   var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
   return regexp.test(s);
}

использование: if (isUrl ("http://www.page.com")) alert (" is true ") else предупреждение («не правильно»);

10 голосов
/ 25 ноября 2011
function IsURL(url) {

    var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
        + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp的user@
        + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
        + "|" // 允许IP和DOMAIN(域名)
        + "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
        + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
        + "[a-z]{2,6})" // first level domain- .com or .museum
        + "(:[0-9]{1,4})?" // 端口- :80
        + "((/?)|" // a slash isn't required if there is no file name
        + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
     var re=new RegExp(strRegex);
     return re.test(url);
 }

Regular expression visualization

Debuggex Demo (улучшенная версия, которая также соответствует 'localhost')

9 голосов
/ 09 ноября 2009

попробуйте что-то вроде этого:

function isUrl(s) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)? (\/|\/([\w#!:.?+=&%@!\-\/]))?/
    return regexp.test(s);
}
4 голосов
/ 09 сентября 2017

Один на будущее с использованием URL-конструктора и базового оператора try catch, он поддерживается в большинстве современных браузеров. Очевидно, нет поддержки IE ...

const isUrl = (str) => {
  try {
    new URL(str);
    return true;
  } catch () {
    return false;  
  }
}

Если URL действителен, он будет проанализирован конструктором и вернет true.

Если строка не является действительным URL, конструктор выдаст синтаксическую ошибку, которая будет перехвачена и вернет false.

3 голосов
/ 19 сентября 2017

Попробуйте этот код. Это выражение является более полным и учитывает IP-адрес:

function checkUrl(s) {
     var regexp = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/
     return regexp.test(s); }
1 голос
/ 09 ноября 2009

Вы можете использовать регулярное выражение для проверки строки

^s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+$  

Регулярные выражения и Javascript

0 голосов
/ 25 февраля 2019

Была та же задача, но все регулярные выражения, которые я нашел в Интернете для проверки правильности URL, не были выполнены в некоторых тестовых случаях.

Вот регулярное выражение, которое работало все:

/^(http:\/\/www\.|https:\/\/www\.|www\.)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?/

Однако, если URL-адрес был таким: google.com Он принял его как действительный (что в моем конкретном случае считалось недействительным )

Это сработало лучше всего, что я нашел. Работал как шарм!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...