[英]Validating a URL in Node.js
我想验证以下类型的 URL:
www.google.com
http://www.google.com
google.com
使用单个正则表达式,是否可以实现? 如果是这样,请在 JavaScript 中分享解决方案。
请注意,我只希望底层协议是 HTTP 或 HTTPS。 此外,手头的主要问题是我们如何使用 JavaScript 中的一个正则表达式来映射所有这三种模式? 它不必检查页面是否处于活动状态。 如果用户输入的值与上面列出的三种情况中的任何一种匹配,则它应该返回true
否则它应该返回false
。
无需使用第三方库。
检查字符串是否是有效的 URL
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
如果您需要将协议限制为一系列协议,您可以执行以下操作
const { URL, parse } = require('url');
const stringIsAValidUrl = (s, protocols) => {
try {
new URL(s);
const parsed = parse(s);
return protocols
? parsed.protocol
? protocols.map(x => `${x.toLowerCase()}:`).includes(parsed.protocol)
: false
: true;
} catch (err) {
return false;
}
};
stringIsAValidUrl('abc://www.example.com:777/a/b?c=d&e=f#g', ['http', 'https']); // false
stringIsAValidUrl('abc://www.example.com:777/a/b?c=d&e=f#g'); // true
由于parse
折旧,代码被简化了一点。 为了解决协议只测试返回true
问题,我不得不说这个实用程序函数是一个模板。 您可以轻松地将其应用于您的用例。 对url.host !== ""
的简单测试涵盖了上述问题
const { URL } = require('url');
const stringIsAValidUrl = (s, protocols) => {
try {
url = new URL(s);
return protocols
? url.protocol
? protocols.map(x => `${x.toLowerCase()}:`).includes(url.protocol)
: false
: true;
} catch (err) {
return false;
}
};
“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');
}
});
使用 url 模块似乎可以解决问题。
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`);
}
我目前遇到了同样的问题,Pouya 的回答可以很好地完成这项工作。 我不会使用它的唯一原因是因为我已经在使用 NPM 包validate.js并且它可以处理 URLs 。
正如您从文档中看到的,URL 验证器基于此gist的正则表达式,因此您可以在不使用整个包的情况下使用它。
我不是正则表达式的忠实粉丝,但如果您正在寻找正则表达式,最好使用流行包中使用的正则表达式。
另一个简单的方法是使用 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 是否有效以及它是否存在
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.