删除、忽略或阻止IE中字符串中的null字符

Remove, ignore or prevent null characters in a string in IE

本文关键字:字符串 null 字符 IE 删除      更新时间:2023-09-26

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

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

我能够在Chrome、Firefox、mac上的Safari以及Windows上的Chrome和Firefox中解析数据文件中的日期,但不能在IE中解析(9、10、11)。数据文件是一个简单的CSV读入d3.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", "‎"]

我该如何去掉这些字符或阻止它们被读入?

清理发生问题的输入将是一个更干净的解决方案。但是,如果您必须在解析之前清理输出,这可能会起作用。

如果在解析日期字符串之前对其运行regex,则似乎可以解决问题。添加了Regex的代码笔中的代码段。

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))
<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>