我想验证以下类型的 URL:
www.google.com
http://www.google.com
google.com
使用单个正则表达式,是否可以实现?如果是这样,请在 JavaScript 中分享一个解决方案。
请注意,我只希望底层协议(protocol)是 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
编辑
如果您需要将协议(protocol)限制为一系列协议(protocol),您可以这样做
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
贬值,代码被简化了一点。为了解决仅协议(protocol)测试返回 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;
}
};
关于javascript - 在 Node.js 中验证 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30931079/