3

我有这个功能,它在所有浏览器中都能正常工作:

    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\u200c-\u200d \u203f\u2040\u2070-\u218f]/g

4

2 回答 2

5

您可能想尝试\u037f,而不是\u37f因为MSDN 指定

\xn
匹配 n,其中 n 是十六进制转义值。
十六进制转义值必须正好是两位数。
例如,'\x41' 匹配“A”。'\x041' 等价于 '\x04' & "1"。
允许在正则表达式中使用 ASCII 代码。

\un
匹配 n,其中 n 是一个 Unicode 字符,表示为四个十六进制数字
例如,\u00A9 匹配版权符号 (©)。

另外,我想知道,这是一个有效的范围:(\xf8-\u037d 根据 asp.net minify 工具)?
您可能想尝试一下\u00f8-\u037d
(可能会添加\xf8-\xff以补偿本地化代码页的上半部分与该区域中的 Unicode 之间的差异。)

希望这可以帮助。

于 2013-04-18T22:54:28.113 回答
0

接受的答案是正确的。但是,将来您可以使用www.debuggex.com,它会立即为您突出显示错误并给您一个解释。

在这种情况下,There must be exactly four hex digits after "\u"

希望有帮助:)

于 2013-04-19T03:33:56.310 回答