【问题标题】:Internet Explorer Returning Wrong Length of String [duplicate]Internet Explorer 返回错误长度的字符串 [重复]
【发布时间】:2016-07-13 13:03:03
【问题描述】:

我在 IE 中遇到了一个可能的错误,其中调用 JavaScript .length 函数返回一个值,如果/当字符串派生自 .toLocaleString() 时,该值将关闭 1。

var d = new Date();
var locale = navigator.language;
var month = d.toLocaleString(locale, { month: "long"});
// month.length will return the length of the month string +1 
//(eg: if month = "March", month.length will return 6.)

有趣的是,上面的代码示例将在以下情况下返回 true(在 IE 中):(month[0] should be "M")

month[0] == "";
month[1] == "M";
month[2] == "a";
month[3] == "r";
month[4] == "c";
month[5] == "h";

在我的特定情况下,这会导致我需要在该月 .slice() 出现问题。示例:如果月份是 3 月,则 IE 将为 month.slice(0,3) 返回“Ma”而不是“Mar”。

这是 IE 的已知错误吗?是否有针对此问题的修复和/或解决方法?

在 IE 和 Chrome/Firefox/Safari 中运行此 fiddle 并注意 month.length 在 IE 中的错误。

我的环境:

操作系统:Win Server 2012 R2

IE 版本:11.0.9600.18231(更新版本:11.0.29)

语言环境:英语/美国

【问题讨论】:

  • 向我们提供您的操作系统、当前区域设置和浏览器版本构建。
  • 这很奇怪。我得到相同的结果。尝试了 .trim() 和 .replace(/\s+/, "") ,但仍然在开头显示额外的空白字符
  • month.charCodeAt(0) 的结果是什么?
  • @apsillers - month.charCodeAt(0) 返回 8206
  • @Knu - 使用请求的信息更新了 OP

标签: javascript locale internet-explorer-11 string-length


【解决方案1】:

所以,我偶然发现了这个帖子toLocaleDateString error in IE 11

这似乎是由于 toLocaleDateString 函数在 IE11 中添加了额外的 LTR 和 RTL 字符引起的。其中一个 cmets 提供了一个对我有用的正则表达式替换功能。

month.replace(/[^ -~]/g,'');

在执行.toLocaleDateString() 之后尝试添加它,它应该可以工作。它对我有用。

这只是我们鄙视 IE 的另一个原因。

【讨论】:

  • 还想添加this question 以供未来读者参考。
  • "这是设计使然,因此输出文本在与其他文本连接时会正常流动。"
  • 非常感谢!在调用 toLocaleDateString() 后,我使用正则表达式检查日期,并且不明白为什么它在 IE11 上不起作用 -_-
猜你喜欢
  • 2018-05-04
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
相关资源
最近更新 更多