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