【问题标题】:Regex to disallow all Special Chars but allow German Umlauts in jQuery?正则表达式禁止所有特殊字符但允许 jQuery 中的德语变音符号?
【发布时间】:2013-06-13 18:18:07
【问题描述】:

我想在 RegEx 中允许所有字母数字字符并禁止所有特殊字符。但我想允许使用德语变音符号,但因为它们也是特殊字符,我无法输入它们。我使用这个脚本:

    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 或其他
  • 给我们你的测试字符串。
  • fiddle 中似乎工作正常
  • 'ü'.match(/[^a-zA-Z0-9äöüÄÖÜß]/g); // null
  • @Ian:你说得对,出于某种原因,我需要使用 Unicode 表示 [^a-zA-Z0-9\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00df]。谢谢:)

标签: javascript jquery regex


【解决方案1】:

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

您的问题在于您没有考虑到白名单中的每个字符。

让我们考虑一下你的测试字符串实际匹配的是什么

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

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

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

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

【讨论】:

  • 嗨 :) 我现在删除了空格,但它仍然不起作用。你知道还有什么问题吗?谢谢 :) 我在我的网站上对其进行了测试,但它不起作用,但在 Fiddle 中它可以。我不知道我现在会做错什么。如果有人有想法,我会很高兴!谢谢:)
  • 出于某种原因,我需要使用 Unicode 表示 [^a-zA-Z0-9\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00df]。谢谢:)
  • @Thorsten 听起来您在页面上混合了字符编码。将所有内容放入 UTF-8 并发送正确的标头。
【解决方案2】:

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

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

谢谢大家:)

【讨论】:

  • 我可能有一个解释:源文件编码不同于服务器(如果您使用模板)或客户端,例如我的意思是 JavaScript。使用 Unicode 是一个很好的做法,虽然有点 hacky 但最便携。
  • 这应该是答案,接受的一个不起作用,并且在打字稿中:[\\w\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00df]
猜你喜欢
  • 1970-01-01
  • 2017-06-17
  • 2015-10-06
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
相关资源
最近更新 更多