一尘不染

验证Node.js中的URL

node.js

我想验证以下类型的URL:

  • www.google.com
  • http://www.google.com
  • google.com

使用单个正则表达式,可以实现吗?如果是这样,请共享一个JavaScript解决方案。

请注意,我只希望底层协议为HTTP或HTTPS。而且,当前的主要问题是如何使用JavaScript中的一个正则表达式来映射所有这三种模式?不必检查页面是否处于活动状态。如果用户输入的值与上面列出的三种情况中的任何一种匹配,则true如果不匹配,则应返回false


阅读 477

收藏
2020-07-07

共1个答案

一尘不染

检查URL是

这有点hack,但是如果我需要这样做,这就是我的处理方式:

第一步

解析并提取给定网址中的域/ 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");
});

第三步

您可以对该网址执行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方法
  • 查看请求

有一个包装!

您可以使用现有的称为 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
2020-07-07