JavaScriptの正規表現で、メタ文字の"\s","\d"はクロスブラウザでの互換性が無い。(追記@2007/11/29)

正規表現で"\d"は、"[0-9]"と一緒だとずっと思っていましたが、FireFoxでは全角数字もマッチします。(FireFox1.5.0.4で確認)

/\d/.test('1')  // =>true
/\d/.test('1') // =>true

ちなみにIE 6、Opera 9では、"/\d/.test('1')"はfalseとなります。

気になったので、"\s"、"\w"についても調べてみたところ、下記のような結果になりました。











パターンFireFox 1.5,2.0IE 6, 7Opera 9
/\s/.test(' ') // 半角truetruetrue
/\s/.test(' ') // 全角truefalsetrue
/\d/.test('1') // 半角truetruetrue
/\d/.test('1') // 全角truefalsefalse
/\w/.test('1') // 半角truetruetrue
/\w/.test('1') // 全角falsefalsefalse
/\w/.test('a') // 半角truetruetrue
/\w/.test('a') // 全角falsefalsefalse

なんと、"\s"も、全角の対応がブラウザによって違いました。

知らずに使っていると、思わぬところでハマリそうです。。
クロスブラウザを考えた場合、"\d","\s"は使わないようにしないと危険ですね。

                              • -

追記@2007/10/06
Wadaさんからコメントで、、

Operaの結果が ECMA-262 3rd Edition の規定どおりのものです。

Firefoxの¥dは「バグ」で、つい最近、もじら組の「ばぐじら」に報告されました。
http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=5863
この日記の比較表のおかげで調査が非常に楽になり、助かりました。
勝手にECMA-262 3rd Editionから逸脱しちゃって、そのことに気がついて戻したようです。
次のFirefox 3で直るはずです。

IE6の ¥s は、ECMA-262 3rd Editionには対応していない、ということです(2nd あるいは1stまでしか対応していない)
IE 7ではきちんと対応しているかもしれません。

と教えていただきました。とても有用な情報ありがとうございます!

                              • -

追記@2007/11/29
\sはIE 7でも対応してませんでした。