0

別のサイトから次のJavaScript正規表現置換を取得して、無効な文字をいくつか削除しました。

str = str.replace(/[^\u000D\u00B7\u0020-\u007E\u00A2-\u00A4]/g,'');

しかし、\ 00B7(ISO-8859-1の中央のドット文字)の出現をキャッチしていないことに気づきました。

ただし、2つのステップで実行した場合は、次のように機能します。

str = str.replace(/\u00B7/g,'');
str = str.replace(/[^\u000D\u00B7\u0020-\u007E\u00A2-\u00A4]/g,'');

1回目の交換は2回目の交換に含まれているようです。誰かが私に2行目がそれだけではうまくいかない理由を説明できますか?ありがとう。

4

2 に答える 2

2

1番目と2番目のパターンは完全に異なります。パターン1は\u00B7を置き換え、2番目のパターンはパターンにリストされていないすべての文字を置き換えます。パターン2からカラットを削除すると、問題が解決するはずです。

于 2013-03-13T03:41:36.430 に答える
0

ただ明確にします:

/[^\u000D\u00B7\u0020-\u007E\u00A2-\u00A4]/

セットにないすべての文字に一致します。したがって、\ u00B7と一致させる(そして''に置き換える)には、パターンから削除します。

/[^\u000D\u0020-\u007E\u00A2-\u00A4]/

ASCII文字セットはhttp://www.asciitable.com/で提供されており、おそらくそれが保持したいセットです。範囲\u0020-\ u007Eは、関心のあるほとんどの一般的なセットをカバーし、他のセットは通常は必要ありません。

\ u000Dはキャリッジリターンです。本当にu00A2、u00A3、u00A4が必要かどうかを調査します。

于 2013-03-13T05:10:27.077 に答える