华尔街日报不能注册!

注:本文专门分析了华尔街日报网不能够注册的技术原因。如果你对此技术原因不感兴趣,而只想找到一种便捷的方法,去阅读华尔街日报网中需要登录才能查看的文章的话,那么请看我的《不登录也可以阅读华尔街日报网文章》一文,该文给出了几种可选的方案,并且提供了一个非常简便的在线工具。

今天用Google搜索新闻,看到一条来自《华尔街日报》的新闻“中国赞赏盖茨表态继续维护网络政策-华尔街日报,进去后,华尔街日报网却说未登录不允许查看。于是就去注册,结果却无法提交注册信息,因为“出生年份格式不正确”,我尝试填写1985、1990、2010甚至不填,都无法通过它的表单验证。

我后来看了它的表单验证代码,发现它对日期的验证是这样写的:

if (!(vbo.match(/\b\d20100208T08:34:59\b$/)) || theDate.getFullYear() - vbo > 100 || theDate.getFullYear() - vbo < 10) {
alert ("出生年份格式不正确,请更改。");
return false;
}

其中,vbo是在出生年份中输入的内容,而 theDate 是当前的系统时间。它的意图是检查 vbo,除去前后的空白后应该是4个数字,而且年龄不应该小于10岁,不应该大于100岁。

意图是对的,但是问题出在第一个使用正则表达式验证 vbo 是否是4个数字上了。我使用 JavaScript 练兵场 试过,如果正则表达式使用 /\d{4}$/,则能正确地验证输入(见:点击这里运行)。而它使用了 /\b\d{4}\b$/,则对 vbo 的测试结果永远返回 null,所以,不管你输入什么,都说你的格式不正确(见:点击这里运行)。

以上测试在Google Chrome和IE 7中进行。

事实上,它的文本框中限制了输入长度只能为4个字符,故再对输入的内容进行去掉两边空白的处理是没有意义的了。希望他们尽管修改代码,否则永远不能够接受新用户的注册了。

如果实在需要去掉两边的空白字符,也不要用/\b\d{4}\b$/这样的方式,可以专门设计一个去掉字符串两边空白的方法来做这件事,如给字符串自定义一个 trim() 方法等。然后使用如下代码:

vbo = vbo.trim();
if (!(vbo.match(/\d{4}$/)) || theDate.getFullYear() - vbo > 100 || theDate.getFullYear() - vbo < 10) {
alert ("出生年份格式不正确,请更改。");
return false;

如何自定义字符串类的trim()方法,可以参见文章:自定义 String 对象的trim()方法

华尔街日报的内容,对于未登录者不允许查看的方式,居然是通过JavaScript来控制的,如果你打开它的网页的速度稍微慢一点儿,你会看见,相关的内容它先是显示出来了的,然后很快被隐藏了。所以,实际上,你仍然可以不注册就阅读它的相关内容。因为内容其实已经到达浏览器了,你可以①通过浏览器设置禁用JavaScript;或者②通过查看源代码方式;或者③通过搜索引擎的缓存来看。因为它的内容是直接输出在了客户端的,所以搜索引擎是可以搜索到它的内容的。通过搜索引擎的缓存来看时,格式良好(不用看那些HTML标签),能直接查看图片(而不是源代码中的图片链接地址)。

 

Add comment

Loading