8

我想允许所有字母数字字符并禁止正则表达式中的所有特殊字符。但我想允许德语变音符号,但因为它们也是特殊字符,我不能输入它们。我使用这个脚本:

    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');        

}

但这也行不通。有人可以告诉我我做错了什么吗?

谢谢 :)

4

2 回答 2

18

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

您的问题来自您没有考虑白名单中所需的每个字符这一事实。

让我们考虑一下您的测试字符串实际匹配的内容

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

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

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

您的测试字符串现在通过了没有匹配的正则表达式,这意味着它在这种情况下是有效的。

于 2013-06-17T18:07:19.773 回答
7

出于某种原因,我需要使用 unicode 表示:

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

谢谢大家 :)

于 2013-06-17T18:56:10.147 回答