1

好的,在这里和谷歌上搜索高和低后,我不得不硬着头皮在这里问一个关于 IE8 中的 RegEx 的新问题。

我有以下代码:

var output = input.replace(/^\S+(\s| )+/, '');

其目的是从金额中删除货币名称,因此“kr 12 345,00”变为“12 345,00”,“NOK 12 345,00”变为“12 345,00”等等。

这在任何地方都可以正常工作,除了在 Internet Explorer 8 或更低版本中,它使输入保持不变

最初我使用的是new RegExp()这样做的方式,但将其更改为正则表达式文字,以查看 IE 处理这两种变体的方式之间是否存在差异 - 谢天谢地,没有:)

我也试过只用\sand 只用 the 但这并没有什么不同。

真正奇怪的是,当在 IE 8 的 W3 School 的“Try It Yourself”页面上以“kr 12 345,00”作为输入运行上述正则表达式时,它可以正常工作(也当第一个空格被替换为 

所以重申一下:我看到这个问题的地方是在我的 Javascript 代码中使用正则表达式时,它位于 AngularJS 过滤器函数中(我正在定义一个过滤器),并且过滤器返回 IE8 中的原始输入(其中在 IE8 中也可以通过 console.log() 看到)。其他人为我在 IE9 中对其进行了测试,并报告说它在那里运行良好——我也在 Chrome 中进行了测试。我遇到此问题的唯一浏览器是 IE8 和 IE7。

这里到底发生了什么?

4

2 回答 2

1

尝试

var output = input.replace(/^\S+([\s\xA0]| )+/, '');

根据此处,“在 IE8 中... \s (应包括所有空格)不包括不间断空格”。

或者更好,只需使用

var output = input.replace( /^\D+/, '' );

其中\D是任何非数字字符。

于 2013-02-26T18:21:59.463 回答
0

首先,当您检查时, 我猜您正在从 html 中获取此值(使用el.innerHTMLor $(el).html()。将所有非破坏性空格转换为 ' ' 的更好方法是使用el.textContentor $(el).text()(这也涵盖了您的情况,例如货币名称被包裹在一个跨度中(可能在其属性中包含数字))

然后使用以下正则表达式替换字符串开头的所有非数字

var output = input.replace(/^[^\d]+/, '');
于 2013-02-26T18:53:22.297 回答