Firefox 2 正则表达式全半角问题

问题

先问一个问题, 在 firefox 2 里,正则表达式字符"\d"全等于"[0-9]"吗?

有可能你会答「是,他们相等」,也有可能你去查了查手册, 看到以下的解释:

\d Matches a nondigit character. Equivalent to [^0-9]. 匹配一个数字字符。等价于 [0-9] 。

那我们测试一下以下代码:

 //http://rank.im
 alert(/^\d{2}$/.test("12"));
 alert('请注意,12是全角');

再试试这个例子:

 alert(/^[0-9]{2}$/.test("12"));
 alert('请注意,12是全角');

Firefox 2 里会出现「\d 」等于 半角 [0-9] 和 全角 [0-9] 现象。

解决办法

Firefox 2 里用正则表达式\d 字符时,会将全角转义成半角再进行匹配, 与手册描述不一致。

解决办法即是:以后大家用正则还是直接用 [0-9] 去匹配数字。

这是否意味着是 Firefox 2 的 bug 呢?非也。

《 Master Regular Expression ,精通正则表达式》书中说是不同的流派的问题。

Matches any non-decimal digit. Equivalent to [\P{Nd}] for Unicode and [^0-9] for non-Unicode, ECMAScript behavior.

另, Firefox 后续版本已无问题。

-- EOF --

Comments