如何在没有正则表达式的情况下读取cookie值?

时间:2016-10-27 07:59:49

标签: javascript jquery cookies

我帮助非营利组织设计了一个三语网站:英语,法语和海地克里奥尔语。我已经能够为访问者设置,更改和删除Cookie。语言选择 - 那部分不是问题。

问题在于,我发现读取cookie值的唯一方法是使用正则表达式。我认为我本身并不会遇到正则表达式的问题,但我真的根本就没有理解它......我复制并粘贴了一些 工作的代码,但是如果发生某些事情会破坏它或者它会发生故障,我知道我无法对其进行故障排除或修复它。任何人都可以建议使用jQuery或只是简单的Javascript来读取cookie中的一个值吗?

Cookie设置如下: document.cookie = "language=EN" (或FR或HT,具体取决于访问者的选择)它为max-ageexpires设置了跨浏览器兼容性,并且它的路径设置为/,因此它覆盖整个站点。这部分不是问题所在。

要阅读它,我使用以下代码,它可以工作:

var lang = document.cookie.replace(/.*\blanguage=(\w+)\b.*/, "$1");
if (lang == "EN") { window.location = "http://example.com/en"; } else
if (lang == "FR") { window.location = "http://example.com/fr"; } else
if (lang == "HT") { window.location = "http://example.com/ht"; };

然而,这是我真正不理解的部分。所有正则表达式编码以及我使用.replace()这一事实对我来说都没有意义。我已经使用.indexOf().toString()来阅读带有search或其他功能的Cookie,但似乎没有任何效果。

我正在使用HTML5和jQuery 3.1.0(不是php),但就像我说的那样,我可以通过简单的Javascript将回访者发送到他们语言的主页。< / p>

我只是想保留将来排除故障的能力。感谢您提供的任何帮助。

编辑:根据@ roberto06的建议添加以下解决方案。

1 个答案:

答案 0 :(得分:0)

@ roberto06&#39的建议完全按照我最简单的方式做了!我用以下方式重写了它:

var en = document.cookie.indexOf("language=EN");
var fr = document.cookie.indexOf("language=FR");
var ht = document.cookie.indexOf("language=HT");

现在设置的语言将返回一个正数(或者在某些测试中为0,假设该值在cookie中排在第一位)。不匹配的结果是-1。那么我只是检查哪个结果数大于或等于0(只有一个),并根据它重定向:

if (en >= 0) { window.location = "http://example.com/en"; } else
if (fr >= 0) { window.location = "http://example.com/fr"; } else
if (ht >= 0) { window.location = "http://example.com/ht"; };

如果这些值都不大于或等于0,则表示cookie中没有设置language值,因此页面根本不会重定向。它保留在语言选择页面上,以便访问者可以设置他们的cookie!谢谢,@ roberto06。我正在尝试这些类型的东西,但显然从来没有做到这一点。

我确定这种方法过于简单&#34;对某些人来说,但我喜欢这种方式对我的目的更好。谢谢!