【问题标题】:Regex for Umlaut变音符号的正则表达式
【发布时间】:2014-03-27 21:13:15
【问题描述】:

我正在使用带有这行验证正则表达式的 JS 动画联系表单:

rx:{".name":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'}, other fields...

我刚刚发现,我不能输入像“Müller”这样的名字。正则表达式不会接受这一点。我该怎么做才能允许使用元音变音?

【问题讨论】:

  • 您可以使用\w 作为“单词”,但您必须测试这是否与元音变音符号相匹配
  • 在我的测试中,\w 没有捕捉到变音符号。

标签: javascript regex forms


【解决方案1】:

您应该在您的正则表达式中使用字符的 unicode 代码,例如 \u0080。 对于德语,我找到了下表:

Zeichen     Unicode
------------------------------
Ä, ä        \u00c4, \u00e4
Ö, ö        \u00d6, \u00f6
Ü, ü        \u00dc, \u00fc
ß           \u00df

(来源http://javawiki.sowas.com/doku.php?id=java:unicode

【讨论】:

  • The holy grail。你也可以写范围,即。 [\u00F0-\u02AF].
  • 使用它来查找除德语变音以外的隐藏字符:regexr.com/4pmml
  • 如果您使用 PHP,请使用 [\x{00F0}-\x{02AF}]
【解决方案2】:

试试这个:

/^[\u00C0-\u017Fa-zA-Z'][\u00C0-\u017Fa-zA-Z-' ]+[\u00C0-\u017Fa-zA-Z']?$/

我已将 unicode 范围 \u00C0-\u017F 添加到每个方括号组的开头。

鉴于/^[\u00C0-\u017FA-Za-z]+$/.test("aeiouçéüß") 返回true,我希望它应该可以工作。

归功于https://stackoverflow.com/a/11550799/940252

【讨论】:

  • [\u00C0-\u017Fa-zA-Z']?$/ 有点多余,你想做什么?
  • 我不确定,因为我对正则表达式不是很感兴趣,而且 OP 没有指定他们希望匹配的模式。我刚刚使用他们的原始代码。如果你能清理它,请做! :)
  • 我会冒险将该空间更改为其他内容以捕获所有非单词字符,例如连字符。这是一个测试:regex101.com/r/zH5uV0/4
  • /^[\u00C0-\u017Fa-zA-Z'][\u00C0-\u017Fa-zA-Z-' ]+[\u00C0-\u017Fa-zA-Z']?$/.test("ü") -> false
【解决方案3】:

\uXXXX 方法的问题在于,并非所有正则表达式都支持它。例如 Visual C++ 不支持它。 在那里,您需要枚举实际的字母。

我建议使用像https://www.regexbuddy.com/ 这样的工具,它知道尽可能多的口味。

【讨论】:

    【解决方案4】:

    我用过

    A-Za-Z-áȧȧėėǟǎăãáȧȧėǟǎăã̊ẹǵġĝǧğììė̇̇̈ň̄̊ẹǵġĝǧğììńṅ̈ň̈ňñņṋņṋòȯȱn̈ňìì̄ïǐĭīĩịĵķǩĺļľŀḽ̄ʼnńn̈ňn̄ñņṋņṋòòȯȱp̄ŕřŗśŝṡšşṣťţṭṱúùûòp̄ŕřŗśŝṡšşṣťţṭṱṣťţṭṱüǔŭūũűůụẃẁŵẅýỳŷÿȳỹźżžẓǯß̄ŕřŗśŝṡšşṣťţṭṱṣťţṭṱùûǔŭūũűůụẃẁŵẅýỳŷÿȳỹźżžẓǯǔŭūũűůụẃẁŵẅýỳŷÿȳỹźżžẓǯçç

    它支持欧洲几乎所有的字符。 Source of truth

    【讨论】:

    • 当有速记字符类和范围时,没有理智的程序员会列出所有字符。请不要那样做。
    【解决方案5】:

    我想出了不同范围的组合:

    [A-Za-zÀ-ž\u0370-\u03FF\u0400-\u04FF]
    

    但我看到它遗漏了@SambitD 提案的一些字母,参考:https://rubular.com/r/2g00QJK4rBS8Y4

    【讨论】:

      【解决方案6】:

      在 JS 中,您可以在正则表达式上使用u 标志来启用对特殊“元序列”的访问,即\P\P 是一个 Unicode 感知查找,它有一个特殊的 Letter 类别。此类别将匹配德语、瑞典语、斯堪的纳维亚语、西里尔字符等。

      简而言之,使用这个:

      /\p{Letter}/u
      

      Till Sanders 给 this article 的道具。

      【讨论】:

        猜你喜欢
        • 2011-08-13
        • 2012-03-05
        • 2017-06-17
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多