验证Node.js中的Url

时间:2015-06-19 06:11:32

标签: javascript node.js

您好,我想验证 www.google.com http://www.google.com google.com 类型的网址一个单一的reguar表达,它是否可以实现,如果是这样,请在javascript中共享解决方案。 请注意我只希望底层协议是HTTP或HTTPS morover现在的主要问题是我们如何使用Javascript中的单个正则表达式映射所有这三个模式,它不必检查页面是否处于活动状态,如果用户输入的值与上面列出的三个案例中的任何一个匹配,则另一方面它应该返回true,如果它没有,它应该返回fasle。

6 个答案:

答案 0 :(得分:26)

检查网址是否

这有点像黑客,但如果我需要这样做,这就是我接近它的方式:

第一步

从给定的URL解析并提取域/ ip

  

http:// drive.google.com / 0/23➡ drive.google.com

这是在nodejs中的方法:

var url = require("url");
var result = url.parse('http://drive.google.com/0/23');
console.log(result.hostname);

第二步

ping 提取的域/ ip - 由于网络配置的原因,并非所有服务器都会响应ICMP(PING)请求。

var ping = require ("net-ping");

var session = ping.createSession ();

session.pingHost (target, function (error, target) {
    if (error)
        console.log (target + ": " + error.toString ());
    else
        console.log (target + ": Alive");
});

第3步

您可以对该网址执行HTTP HEAD请求并检查状态代码。

var request = require('request');
request({method: 'HEAD', uri:'http://www.google.com'}, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // Show the HTML for the Google homepage.
  }
})
  • 如果这是一个Web服务(因为您可以触发操作),这有点冒险。
  • 如果网址需要身份验证/重定向会更复杂
  • @JanJůna评论说使用HEAD会更好。他完全正确。请注意,并非所有Web服务器都支持HEAD方法
  • 查看request

有一个包!

您可以使用名为 validUrl

的现有nodejs包

<强>用法:

var validUrl = require('valid-url');

var url = "http://bla.com"
if (validUrl.isUri(url)){
    console.log('Looks like an URI');
} 
else {
    console.log('Not a URI');
}

<强>安装

npm install valid-url --save

如果您还想要一个简单的REGEX

谷歌是你的朋友。 check this out

答案 1 :(得分:1)

“valid-url”npm包对我不起作用。对于无效的网址,它返回有效。对我有用的是“url-exists”

const urlExists = require("url-exists");

urlExists(myurl, function(err, exists) {
  if (exists) {
    res.send('Good URL');
  } else {
    res.send('Bad URL');
  }
});

答案 2 :(得分:1)

使用 url 模块似乎可以解决问题。

Node.js v15.8.0 Documentation - url module

const url = require('url');    

try {
  const myURL = new URL(imageUrl);
} catch (error) {
  console.log(`${Date().toString()}: ${error.input} is not a valid url`);
  return res.status(400).send(`${error.input} is not a valid url`);
}

答案 3 :(得分:0)

无需使用第三方库

要检查字符串是否为有效网址

  const URL = require("url").URL;

  const stringIsAValidUrl = (s) => {
    try {
      new URL(s);
      return true;
    } catch (err) {
      return false;
    }
  };

  stringIsAValidUrl("https://www.example.com:777/a/b?c=d&e=f#g"); //true
  stringIsAValidUrl("invalid"): //false

答案 4 :(得分:0)

我目前也遇到同样的问题,Pouya的回答就可以了。我不会使用它的唯一原因是因为我已经在使用NPM软件包validate.js并且它可以handle URLs

从文档中可以看到,URL验证器基于此gist的正则表达式,因此您无需使用整个程序包就可以使用它。

我不是正则表达式的忠实拥护者,但是如果您正在寻找一个正则表达式,那么最好使用流行软件包中使用的RegEx。

答案 5 :(得分:0)

其他简单的方法是使用 Node.JS DNS 模块。

DNS 模块提供了一种执行名称解析的方法,您可以使用它来验证 url 是否有效。

const dns = require('dns');
const url = require('url'); 

const lookupUrl = "https://stackoverflow.com";
const parsedLookupUrl = url.parse(lookupUrl);

dns.lookup(parsedLookupUrl.protocol ? parsedLookupUrl.host 
           : parsedLookupUrl.path, (error,address,family)=>{
   
              console.log(error || !address ? lookupUrl + ' is an invalid url!' 
                           : lookupUrl + ' is a valid url: ' + ' at ' + address);
    
              }
);

这样你就可以检查 url 是否有效以及它是否存在