0

さまざまな Unicode 文字を消去する JavaScript 関数を開発しました。例: "ñeóñú a1.txt" => "neonu a1.txt"。このために、正規表現を使用しました。

 var = new RegExp patternA ("[\\u0300-\\u036F]", "g");
 name = name.replace (patternA,'');

ただし、IE では正しく動作しません。私の調査が正しければ、IE は同じように Unicode を検出しません。すべてのブラウザーと互換性のあるライブラリ XRegExp ( http://xregexp.com/ ) を使用して同等の関数を作成しようとしていますが、Unicode パターンの記述方法がわからないため、XRegExp は IE で動作します。

失敗した試みの 1 つ:

    XRegExp.replace(name,'\\u0300-\\u036F','');

どうすればこのパターンを作成できますか?

4

1 に答える 1

1

XRegExp.replaceメソッドの 2 番目の引数として提供される値は、文字列ではなく、正規表現オブジェクトである必要があります。正規表現は、XRegExpまたはネイティブRegExpコンストラクターによって構築できます。したがって、次の 2 行は同等です。

name = name.replace(/[\u0300-\u036F]/g, '');
// Is equivalent to:
name = XRegExp.replace(name, /[\u0300-\u036F]/g, '');

ただし、あなたが書いた次の行は無効です。

var = new RegExp patternA ("[\\u0300-\\u036F]", "g");

代わりに、次のようにする必要があります。

var patternA = new RegExp ("[\\u0300-\\u036F]", "g");

それがあなたの問題の原因かどうかはわかりませんが、おそらく. 記録として、IE の Unicode サポートは、他のブラウザーと同等かそれ以上です。

XRegExp を使用すると、マジック ナンバーを使用するのではなく、名前でブロックを識別できます。XRegExp('[\\u0300-\\u036F]')XRegExp('\\p{InCombiningDiacriticalMarks}')はまったく同等です。ただし、そのブロック内のマークは、すべての組み合わせマークの小さなサブセットです。実際には のようなものに一致させたい場合がありXRegExp('\\p{M}')ます。ただし、あなたが行っているように単純にマークを削除することは、分音符号を削除する安全な方法ではないことに注意してください。一般に、あなたがやろうとしていることは悪い考えであり、避けるべきです。なぜなら、それはしばしば間違った、または理解不能な結果につながるからです。

于 2012-09-23T15:00:45.650 に答える