RegEx不在IE8中工作

时间:2013-02-26 17:49:58

标签: javascript regex internet-explorer

好的,在这里和谷歌上搜索高低之后,我不得不咬紧牙关,在IE8中提出一个关于RegEx的新问题。

我有以下代码:

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

其目的是从金额中删除货币名称,因此" kr 12 345,00"成为" 12 345,00"和#34; NOK 12 345,00"成为" 12 345,00"等等。

除了Internet Explorer 8或更低版本之外,其他地方都可以正常工作,其中保持输入不变

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

我还尝试过只使用\s ,但这并没有什么不同。

真的 奇怪的是,当使用" kr 12 345,00"运行上述正则表达式时作为IE 8中W3 School's "Try It Yourself" page的输入,它工作正常! (当第一个空格用 代替时)

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

这里到底发生了什么?

2 个答案:

答案 0 :(得分:1)

尝试

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

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

或者更好,只需使用

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

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

答案 1 :(得分:0)

首先,当您检查 时,我猜您是从html中获取此值(使用el.innerHTML$(el).html()。这是一种更好的方法,可以转换所有非破坏性空格成''是使用el.textContent$(el).text()(这也包含了例如货币名称包含在范围内的实例(可能在其属性中包含数字))

然后使用以下正则表达式替换字符串

开头的所有非数字
var output = input.replace(/^[^\d]+/, '');