如何用String.prototype.startsWith判断链接是否以特定协议开头?
- 内容介绍
- 相关推荐
本文共计889个文字,预计阅读时间需要4分钟。
直接使用 `String.prototype.startsWith` 检查链接,但有时返回 `false`。这通常是因为字符串开头有空格、换行或不可见的 Unicode 字符(如零宽空格 `u200b`)。`startsWith` 是严格匹配,不自动去除前导空格或处理特殊字符。
实操建议:
- 先用
.trim()清除首尾空白:url.trim().startsWith('https://') - 若需兼容带 BOM 的字符串(如 UTF-8 BOM
\ufeff),可加.replace(/^\ufeff/, '') - 避免用正则替代——除非需要更复杂的协议变体(如大小写不敏感),否则纯前缀判断用
startsWith更快、更直观
区分 http 和 https 时要注意大小写和斜杠
startsWith 默认区分大小写,而协议名在 URL 中按规范应为小写,但实际输入可能混入大写(如 HTTP:// 或 Https://)。另外,'http:' 和 'http://' 完全不同——前者匹配 http:foo 这类非法 URL,后者才匹配标准协议+双斜杠结构。
本文共计889个文字,预计阅读时间需要4分钟。
直接使用 `String.prototype.startsWith` 检查链接,但有时返回 `false`。这通常是因为字符串开头有空格、换行或不可见的 Unicode 字符(如零宽空格 `u200b`)。`startsWith` 是严格匹配,不自动去除前导空格或处理特殊字符。
实操建议:
- 先用
.trim()清除首尾空白:url.trim().startsWith('https://') - 若需兼容带 BOM 的字符串(如 UTF-8 BOM
\ufeff),可加.replace(/^\ufeff/, '') - 避免用正则替代——除非需要更复杂的协议变体(如大小写不敏感),否则纯前缀判断用
startsWith更快、更直观
区分 http 和 https 时要注意大小写和斜杠
startsWith 默认区分大小写,而协议名在 URL 中按规范应为小写,但实际输入可能混入大写(如 HTTP:// 或 Https://)。另外,'http:' 和 'http://' 完全不同——前者匹配 http:foo 这类非法 URL,后者才匹配标准协议+双斜杠结构。

