在jQuery中使用正则表达式禁止所有特殊字符但允许德语Umlauts?

11

我希望正则表达式中能够允许所有的字母数字字符,禁止所有特殊字符。但是我想要允许德语Umlauts字符,因为它们也属于特殊字符,所以我无法输入它们。我使用以下脚本:

    if(website_media_description.match(/[^a-zA-Z0-9]/g)) { 

    alert('Found Special Char');        

}

当变量中包含äöüÄÖÜß时,我也会收到警报。我还尝试了这个脚本:

    if(website_media_description.match(/[^a-zA-Z0-9äöüÄÖÜß]/g)) { 

    alert('Found Special Char');        

}

但是这种方法也不起作用。有人可以告诉我做错了什么吗?
谢谢 :)

我认为你需要使用它们的Unicode表示,例如\u2345或其他。 - Ian
请提供您的测试字符串。 - Casimir et Hippolyte
在这个fiddle中似乎运行良好。 - wirey00
但为什么不在我的网站上呢? - Thorsten
1
@Ian:你是对的,由于某些原因我需要使用Unicode表示方式[^a-zA-Z0-9\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00df]。谢谢 :) - Thorsten
显示剩余3条评论
2个回答

21

我的测试字符串来自输入字段,我写下了“描述测试1 öäüÖÄÜß”

你的问题是因为你没有考虑到你想要的白名单中的每个字符。

让我们考虑实际匹配你的测试字符串的内容是什么。

"description test 1 öäüÖÄÜß".match(/[^a-zA-Z0-9äöüÄÖÜß]/g);
// [" ", " ", " "]

如我们所见,它匹配了3次,每次都是空格。因此解决方案是将一个空格添加到您的白名单中(假设您不想允许制表符/回车等)。

"description test 1 öäüÖÄÜß".match(/[^a-zA-Z0-9äöüÄÖÜß ]/g);
// null

你的测试字符串现在通过了RegExp,没有匹配,这意味着在这种情况下它是有效的。


嗨 :) 我去除了空格,但它仍然不起作用。你知道还有什么可能出错吗?谢谢 :) 我在我的网站上测试了它,但它不起作用,但在 Fiddle 上它可以。我现在不知道我做错了什么。如果有人有想法,我会很高兴的!谢谢 :) - Thorsten
1
由于某些原因,我需要使用Unicode表示形式 [^a-zA-Z0-9\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00df]。谢谢 :) - Thorsten
@Thorsten 听起来你在页面上混合使用字符编码。将所有内容放在_UTF-8_中,并发送正确的标头。 - Paul S.

8

因某些原因,我需要使用Unicode表示:

[^a-zA-Z0-9\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00df]`

感谢大家 :)

我可能有一个解释:源文件编码与服务器(如果您使用模板)或客户端不同,我指的是JavaScript之类的客户端。最好使用Unicode,这是一种有点hacky但最便携的做法。 - VeRo
这应该是答案,被接受的那个不起作用,在TypeScript中它是:[\w\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00df]。 - Macilias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接