在IE中删除,忽略或阻止字符串中的空字符

时间:2014-10-29 02:04:57

标签: javascript string internet-explorer date

在数据文件中遇到字符串中的空字符,这会导致IE出现问题。一个codepen就在这里;

http://codepen.io/gradualstudent/pen/DBExf

能够解析Chrome,Firefox,Safari上的数据文件以及Windows上的Chrome和Firefox数据文件中的日期,但不能解析IE中的日期(9,10,11)。数据文件是使用d3.csv(...)

读取的简单CSV

这样的字符串示例表面上是"4/23/2014"。但它无法解析为IE中的日期:

JSON.stringify(dt);  //  "4/23/2014"
new Date(dt); // [date] Invalid Date
Date.parse(dt); // NaN

尽管字符串文字解析得很好:

new Date("4/23/2014") // [date] Wed Apr 23 2014 00:00:00 GMT-0400 

事实证明,数据文件中的字符串有很多空字符:

var dta = [];
for (var i=0; i<dt.length; i++) { dta[i] = dt.charAt(i); }
JSON.stringify(dta);
["‎", "4", "‎", "/", "‎", "2", "3", "‎", "/", "‎", "2", "0", "1", "4", "‎"]

如何删除这些字符或阻止它们被读入?

1 个答案:

答案 0 :(得分:2)

清除问题所在的输入将是一个更清洁的解决方案。但是如果你必须在解析之前清理输出,这可能会起作用。

如果在解析日期字符串之前运行正则表达式,它似乎可以解决问题。 Codepen的代码片段与Regex一起添加。

&#13;
&#13;
var dt = "‎4‎/‎23‎/‎2014‎";
$("#dt").html(new Date(dt))

//Clear everything except expected items in a date

// Ordinary null character
var dt1 = dt.replace(/[^0-9/]/ig, "");
$("#dt1").html(new Date(dt1))


//Or to specifically target the character causing the issues

// Ordinary null character
var dt2 = dt.replace(/[\u200E]/ig, "");
$("#dt2").html(new Date(dt2))
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
dt: <code id="dt"></code>
<br>dt1: <code id="dt1"></code>
<br>dt2: <code id="dt2"></code>
&#13;
&#13;
&#13;