2016-03-25 12 views
7

IEでJavaScriptを呼び出す可能性のあるバグが発生しました。 length関数は、文字列が.toLocaleString()から派生したときに/が1の場合にオフになる値を返します。文字列の長さが間違っているInternet Explorer

var d = new Date(); 
var locale = navigator.language; 
var month = d.toLocaleString(locale, { month: "long"}); 
// month.length will return the length of the month string +1 
//(eg: if month = "March", month.length will return 6.) 

興味深いことに、上記のコード例は、以下のために(IEで)trueを返します。私の特定の場合において

month[0] == ""; 
month[1] == "M"; 
month[2] == "a"; 
month[3] == "r"; 
month[4] == "c"; 
month[5] == "h"; 

( "M" であるべき月[0])、これは月に.slice()が必要な問題を引き起こしています。例:月が3月の場合、IEは "Mar"ではなくmonth.slice(0,3)の "Ma"を返します。

これはIEの既知のバグですか?この問題の修正や回避策はありますか?

IEとChrome/Firefox/Safariでこのfiddleを実行して、month.lengthがIEでどのように間違っているかに注目してください。

私の環境:

OS:勝つServer 2012のR2

IEバージョン:11.0.9600.18231(アップデートバージョン:11.0.29)

ロケール:英語/ US

+0

OS、現在のロケール、およびブラウザのバージョンビルドを教えてください。 – Knu

+0

それは奇妙です。私は同じ結果を得る。 .strim()と.replace(/ \ s + /、 "")を試しましたが、先頭に余分な空白文字が残っています –

+2

'month.charCodeAt(0)'の結果は何ですか? – apsillers

答えて

7

だから、私はこの記事を見つけた。toLocaleDateString error in IE 11

これは、toLocaleDateString関数がIE11の余分なLTRとRTL文字を追加したために発生しているようです。コメントの1つは、私のために働いている正規表現置換関数を与えました。

month.replace(/[^ -~]/g,''); 

.toLocaleDateString()を実行した後に追加してください。正常に動作するはずです。それは私のために働いた。

IEを軽視するもう一つの理由です。

+2

今後の読者に関連して[この質問](http://stackoverflow.com/questions/25574963/ies-tolocalestring-has-strange-characters-in-results)も追加したいと考えています。 – Chatoyancy

+0

"これは仕様です。そのため、出力テキストは他のテキストと連結すると正しく流れます。" – Knu

+0

ありがとうございました!私はtoLocaleDateString() の呼び出しの後に日付をチェックするために正規表現を使用し、それがIE11で動作しない理由をundestandしなかった-_- –

関連する問題