Microsoft Edge javascript toLocaleTimeString不正确的间距

Aar*_*ron 8 javascript microsoft-edge

我无法理解一些似乎在Edge中表现不同的JavaScript正在发生的事情.特别把它煮成:

var testi = new Date().toLocaleTimeString();
var len2 = testi.length;
alert(len2);
Run Code Online (Sandbox Code Playgroud)

我在Edge中的长度是17,在Chrome和IE中它是10在字符串中似乎有一些幻像空间,它也搞砸了我试图将其子串起来.

https://jsfiddle.net/m1m8h7ym/

仅供参考我的时区是美国中部.

Thr*_*gle 13

看起来微软正在以无形的从左到右的标记滑倒.这也发生在边缘模式下的IE11中.我通过循环遍历字符串中的每个字符并将其传递给我来解决这个问题encodeURIComponent()

var output = document.getElementById("output");
var testi = new Date().toLocaleTimeString();
var row;
for (var i = 0, len = testi.length; i < len; i++) {
    row = document.createElement("pre");
    row.innerHTML = encodeURIComponent(testi[i]);
    output.appendChild(row);
}
Run Code Online (Sandbox Code Playgroud)
<div id="output"></div>
Run Code Online (Sandbox Code Playgroud)

您可以通过其unicode删除它来删除它,可以通过表达式在正则表达式中捕获它\u200E.

var output = document.getElementById("output");
var testi = new Date().toLocaleTimeString().replace(/\u200E/g,"");
var row;
for (var i = 0, len = testi.length; i < len; i++) {
    row = document.createElement("pre");
    row.innerHTML = encodeURIComponent(testi[i]);
    output.appendChild(row);
}
Run Code Online (Sandbox Code Playgroud)
<div id="output"></div>
Run Code Online (Sandbox Code Playgroud)

  • 很高兴我能帮上忙!请注意,.toLocaleTimeString()返回的字符串在不同的区域设置/区域性之间可能会有很大的不同。当使用希伯来语/阿拉伯语作为默认浏览器时,如果出现“从右到左”的控制标记,我不会感到惊讶。 (2认同)