2013-04-18 41 views
3

我有這個功能,它在所有瀏覽器工作正常:JavaScript正則表達式規則,打破ASP.NET縮小

cleanKey = function(key){ 
     return key.replace(/[^-._0-9A-Za-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u37f-\u1fff\u200c-\u200d\u203f\u2040\u2070-\u218f]/g, "-"); 
    }; 

然而,我的ASP.NET MVC 3項目當試圖拋出一個正則表達式語法錯誤來縮小代碼:

運行時錯誤JS5017:語法錯誤的正則表達式
/[^-._0-9A-Za-z\xb7\xc0-\xd6\xd8-\xf6\xf8 - \ u037d \ u37f- \ u1fff \ u200d \ ufdf \ u2040 \ u2070- \ ufraf \ f/g

+1

我把編輯問題的自由,因爲我相信,上一稿,你的問題是更好:它也包括了JS代碼,相關的錯誤號碼和錯誤信息(對未來的谷歌搜索很有用),並指出(正確),正則表達式*在大多數瀏覽器中都有效。 – GitaarLAB

回答

5

你可能想嘗試\u037f而不是\u37f因爲MSDN specifies

\ XN
匹配n,其中n是一個十六進制轉義值。
十六進制轉義值必須是兩位數字。
例如,'\ x41'與「A」匹配。 '\ x041'相當於'\ x04'&「1」。
允許在正則表達式中使用ASCII碼。

\未
相配n,其中n是Unicode字符表示爲四個十六進制數字
例如,\ u00A9匹配版權符號(©)。

另外,我想知道,這是一個有效的範圍:\xf8-\u037d(根據asp.net minify工具)?
您可能想嘗試\u00f8-\u037d
(可能會添加\xf8-\xff以補償本地化代碼頁的上半部分與該區域中的Unicode之間的差異。)

希望這有助於您。

0

接受的答案是正確的。但是,將來您可以使用www.debuggex.com,它會立即突出顯示您的錯誤並給出解釋。

在這種情況下,There must be exactly four hex digits after "\u"

希望幫助:)

+0

很好的插件[你的](http://stackoverflow.com/questions/15819919/where-can-i-find-unit-tests-for-regular-expressions-in-multiple-languages)酷工具。出於好奇,那''xf8- \ u037d'範圍呢?它不應該抓住這個?我的理解是,'ascii'通常是一個本地化的代碼頁(如'win1252')和(除了下半部分)不同於Unicode(除非網頁被用作unicode)。但我可能是錯的。 – GitaarLAB

+0

延遲迴複道歉。兩個轉義序列都代表16位代碼點。因此,只要第一個代碼點小於第二個代碼點,範圍就是有效的。有關更多信息,請參閱http:// inimino。組織/〜inimino /博客/ javascript_cset –