2007年12月30日日曜日

Safariの正規表現リテラルでユニコードエスケープが使えないバグ

Safari 2.0.4で発生したバグ。Safari 3ではこのバグは修正済みと思われる。(WindowsのSafari 3.0.4 (beta)では正常に動作した。)


問題点:
下記のように、正規表現リテラル内にユニコードエスケープで書いた場合に、マッチするはずの正規表現に正常にマッチしないという。

"カタカナ".match(/^[u30a1-u30f6u30fc]*$/)

ユニコードエスケープ自体が使えないわけではなくて、正規表現リテラル内でのみユニコードエスケープが使えないという現象。


回避策:
正規表現リテラルではなく、正規表現オブジェクトを渡す。
"カタカナ".match(new RegExp("^[u30a1-u30f6u30fc]*$"))

内部的には同じ動きになるのかと思ったが、どうやら違うらしい。



参考:
 Safari 2.0.4 Fails on Unicode Escape Sequences in Regular Expressions
 赤福プラス + Safari patch > パッチの内容

0 件のコメント:

ブログ アーカイブ

tags