1

OK、こことGoogleの両方で高低を検索した後、私は弾丸を噛み、IE8の正規表現に関してここで新しい質問をする必要があります。

私は次のコードを持っています:

var output = input.replace(/^\S+(\s| )+/, '');

その目的は金額から通貨名を削除することであるため、「kr12345,00」は「12345,00」になり、「NOK12345,00」は「12345,00」になります。

これは、入力が変更されないままになるInternetExplorerバージョン8以下を除いてすべての場所で正常に機能します。

最初はそのnew RegExp()方法を使用していましたが、正規表現リテラルに変更して、IEがこれら2つのバリエーションを処理する方法に違いがあるかどうかを確認しました-ありがたいことに、ありませんでした:)

私もとだけで試しまし\s が、それは違いはありませんでした。

本当に奇妙なことは、 IE8のW3Schoolの「TryItYourself」ページの入力として「kr12345,00」を使用して上記の正規表現を実行すると、正常に機能することです。(最初のスペースが)に置き換えられた場合も 

繰り返しになりますが、この問題が発生しているのは、Javascriptコードで正規表現を使用している場合です。これはAngularJSフィルター関数(フィルターを定義しています)にあり、フィルターはIE8で元の入力を返します( IE8のconsole.log()でも見られます)。他の誰かが私のためにIE9でそれをテストし、そこでうまく機能したと報告しました-そして私はChromeでもテストしました。私がこの問題に遭遇した唯一のブラウザはIE8とIE7です。

ここで一体何が起こっているのでしょうか?

4

2 に答える 2

1

試す

var output = input.replace(/^\S+([\s\xA0]| )+/, '');

ここによると、「IE8では... \ s(すべての空白を含める必要があります)には、改行しないスペースは含まれません」。

またはそれ以上に、

var output = input.replace( /^\D+/, '' );

ここで、\Dは数字以外の文字です。

于 2013-02-26T18:21:59.463 に答える
0

まず、チェックして いるときに、htmlからこの値を取得していると思います(el.innerHTMLまたはを使用し$(el).html()ます。すべての改行しない空白を''に変換するより良い方法は、el.textContentまたはを使用する$(el).text()ことです(たとえば、通貨名はスパンで囲まれています(属性に数字が含まれている可能性があります))

次に、文字列の先頭にあるすべての非数字を置き換える次の正規表現

var output = input.replace(/^[^\d]+/, '');
于 2013-02-26T18:53:22.297 に答える