javascript - 在 Javascript 中拆分字符串的奇怪行为

标签 javascript internet-explorer-11 parseint

我正在尝试做一些相对简单的事情。我有一个格式为 dd/MM/yyyy 的日期,例如:

var newDate = "‎11‎/‎06‎/‎2015";

我想将其转换为日期。

此代码仅适用于 Chrome 和 Firefox:

new Date(newDate)

在 IE11 中我得到 Nan

所以我正在尝试这样做:

var parts = newDate.split("/");
var year = parts[2].trim();
var month = parts[1].trim();
var day = parts[0].trim();
var dt = new Date(Number(year), Number(month) - 1, Number(day));

这应该可行,但我遇到了一个非常奇怪的错误。

如果你尝试这段代码:

function myFunction() {
  var newDate = "‎11‎/‎06‎/‎2015";
  var parts = newDate.split('/');
  var year = parts[2].trim();

  var a = year;
  var b = Number(year);
  var c = parseInt(year, 10);
  var d = parts;
  var n = a + "<br>" + b + "<br>" + c + "<br>" + d;
  document.getElementById("demo").innerHTML = n;
}
<p>Click the button to see the parse error.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

然后在 IE 中它添加一个神秘字符并打印出 ý2015 并且在 chrome 中它打印出 ?2015

事实上,IE 中的部分值是:ý11ý,ý06ý,ý2015 在 Chrome 中:?11?,?06?,?2015

我不明白这些神秘人物是从哪里来的!我的原始字符串只是 "11/06/2015"

似乎没有办法做这么简单的事情,比如从一个简单的字符串中解析一个整数。

Fiddle没有显示隐藏的字符,但我相信它们仍然存在,因为 Number("2015") 导致 NaN 正如您可以清楚地看到 here 有什么想法吗?

更新

字符串中确实有隐藏字符,查了一下发现是这样创建的:

var date = new Date();
var dateToSave = date.toLocaleDateString();

但仅限于 IE。

在 Chrome 或 Firefox 中,输出不包含 U+200E 从左到右的标记,但在 IE 中它包含!

删除 toLocaleDateString() 并将其替换为 kendo.toString(selectedValue, "dd/MM/yyyy") 解决了问题。

作为记录,我还尝试了 moment.js 和以下行: moment(selectedValue).format("DD/MM/YYYY") 但出于某种原因在 IE11 中结果的最开头有一个隐藏的 U+200E 字符字符串。

最佳答案

我运行了 "11/06/2015".split('').map(function(s){return s.charCodeAt(0)})(得到Unicode 值),并发现一些有趣的东西:[8206, 49, 49, 8206, 47, 8206, 48, 54, 8206, 47, 8206, 50, 48, 49, 53]

你有一个 U+200E left-to-right mark在那里。我不知道它是怎么到那里的。

删除它,你会没事的。

在这里,您可以复制并粘贴我提供的字符串:"11/06/2015"

关于javascript - 在 Javascript 中拆分字符串的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783955/

相关文章:

javascript - 如何在 Angular 2 中编写窗口关闭事件处理程序?

javascript - 在 html 中样式化元素的优先级是什么?

cookies - 对 <server>/browserconfig.xml 的请求不发送 session cookie?

javascript - 将字符串转换为所选选项的整数

javascript - JavaScript 中一长串整数的转换问题

javascript - 在javascript中将字符串日期转换为日期时间,如何使用dateformat

javascript - 没有在tinyMCE编辑器中获得更新的测试

CSS 过渡(伪元素、字体大小、em、IE)不起作用

css - IE11 css live 编辑器不恰本地截断 css 文本

java - 在 Java 中,我试图将 & 与过滤器一起使用来获取整数的每个字节,它适用于最后 3 个字节,但第一个会引发数字格式异常