2014-10-29 24 views
0

在數據文件中遇到字符串中的空字符,這會在IE中導致問題。一個codepen在這裏;刪除,忽略或阻止IE中字符串中的空字符

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

我能夠在Windows的Chrome,火狐,Safari在Mac和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", "‎"] 

如何去除這些字符或防止它們被讀入?

+0

嘗試'dt.split( 「」)。過濾器(布爾)。加入( 「」)'。您需要在舊ID中填充'.filter()'方法。 – 2014-10-29 02:19:13

+1

看起來像是一些時髦的角色。試試這個'dt.split(「」)。filter(函數(c){0}返回c.charCodeAt()!== 8206; })。join(「」)' – 2014-10-29 02:25:47

+0

布爾過濾器很棒。它的工作 - 但發現這些不是普通的空字符,它們是真的。如果我簡單地在分割中輸入''「'',這個解決方案就會失敗,但是如果我從數組中複製/粘貼'''''''''',那麼這個解決方案會失敗修改了codepen以顯示這一點。這一定是一些奇怪的編碼? – prototype 2014-10-29 02:26:33

回答

2

清理問題發生處的輸入將是一個更清潔的解決方案。但是,如果你必須在解析之前清理輸出,這可能是正常的。

如果您在解析它之前針對日期字符串運行正則表達式似乎可以解決問題。 添加了正則表達式的代碼片段。

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>