好的,在这里和谷歌上搜索高低之后,我不得不咬紧牙关,在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。
这里到底发生了什么?
答案 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]+/, '');