我希望在我的 javascript 中进行一个检查,以确定页面加载是否在我的本地机器上。
我想这样做的原因是,在开发过程中,我希望确保我的服务器端(C#)验证是否正确工作。因此,我希望能够同时显示客户端和服务器端的错误。
所以,在测试过程中,我在我的 jquery 验证中设置了一个标志,始终允许无效数据通过。这样,我就可以一次性看到客户端和服务器端的错误。
但是现在,当从开发环境切换到生产环境时,我必须手动来回更改。
我希望在我的 javascript 中进行一个检查,以确定页面加载是否在我的本地机器上。
我想这样做的原因是,在开发过程中,我希望确保我的服务器端(C#)验证是否正确工作。因此,我希望能够同时显示客户端和服务器端的错误。
所以,在测试过程中,我在我的 jquery 验证中设置了一个标志,始终允许无效数据通过。这样,我就可以一次性看到客户端和服务器端的错误。
但是现在,当从开发环境切换到生产环境时,我必须手动来回更改。
正则表达式虽然速度较慢,但简短而整洁。此外,这里没有人检查IPv6本地主机(::1)。
/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)
它检查常规的localhost,.local域和文件:(空主机名)。
*) 在Chrome中,[].includes(...)
的性能最佳(42毫秒),其次是简单循环(for,while)与数组项检查(119毫秒),然后是[].indexOf(...) > -1
(289毫秒),最后是正则表达式(566毫秒)。
但这些测量结果在某种程度上是相对的,因为不同的浏览器进行了不同的优化。在FF 52 ESR中,includes
和indexOf
具有类似的结果,正则表达式慢2倍,循环慢6倍。
根据上述评论,以下正则表达式帮助我验证URL是否为“localhost”,任何IPv4或IPv6 IP地址。
window.location.hostname.match(/localhost|[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}|::1|\.local|^$/gi)
这里有很多答案都忽略了一些边缘情况。例如,根据 DNS/hosts 等,您可能会出现 something.localhost
。
因此,这里是一个稍微全面一些的 ES6 答案:
const localHost = ['localhost', '127.0.0.1', '::1', ''].includes(window.location.hostname) || window.location.hostname.endsWith('.localhost')