2012-09-19 91 views
0

我開發了一個javascript函數來清除一系列Unicode字符。例如,「ñeññúa1.txt」=>「neonu a1.txt」。爲此,我使用了一個正則表達式:XRegExp替換IE中的Unicode字符

var = new RegExp patternA ("[\\u0300-\\u036F]", "g"); 
name = name.replace (patternA,''); 

但它在IE中無法正常工作。如果我的研究是正確的,IE不會以相同的方式檢測Unicode。我試圖使用與所有瀏覽器兼容的庫XRegExp(http://xregexp.com/)來製作等效函數,但我不知道如何編寫Unicode模式,因此XRegExp可在IE中使用。

一個失敗的attemps的:

XRegExp.replace(name,'\\u0300-\\u036F',''); 

如何建立這種模式?

+1

[放棄支持](http://techcrunch.com/2012/04/01/bootstrapped-startup-saves-over-100k-by-dropping-ie/)[for IE](https:// paydirtapp。 COM /博客/我們,不要支持IE /)。 – m0skit0

回答

0

作爲XRegExp.replace方法的第二個參數提供的值應該是正則表達式對象,而不是字符串。正則表達式可以由XRegExp或本地RegExp構造函數構建。因此,下面兩行是等價的:

name = name.replace(/[\u0300-\u036F]/g, ''); 
// Is equivalent to: 
name = XRegExp.replace(name, /[\u0300-\u036F]/g, ''); 

你寫了下面的線,但是,是不是有效的:

var = new RegExp patternA ("[\\u0300-\\u036F]", "g");

相反,它應該是:

var patternA = new RegExp ("[\\u0300-\\u036F]", "g");

我不知道這是否是問題的根源,但也許。爲了記錄,IE的Unicode支持與其他瀏覽器一樣好或者更好。

XRegExp可以讓你識別你的名字,而不是使用幻數。 XRegExp('[\\u0300-\\u036F]')XRegExp('\\p{InCombiningDiacriticalMarks}')完全相同。但是,該塊中的標記是所有組合標記的一小部分。你可能實際上想匹配類似XRegExp('\\p{M}')的東西。不過,請注意,簡單地刪除標記就像您正在執行的操作不是刪除變音符號的安全方法。一般來說,你試圖做的是一個壞主意,應該避免,因爲它往往會導致錯誤或無法理解的結果。