【问题标题】:Regex matching whitespace and accented characters正则表达式匹配空格和重音字符
【发布时间】:2016-08-11 14:01:39
【问题描述】:

我想验证一个名称字符串。它可以包含正常的大写/小写字符,如 A-Z、a-z 以及空格。但是名称也可以有重音字符,如éÄÖÜ 等。那么我如何允许重音字符而不允许非名称字符,如/&

我试过了:

let checkValue = /^[a-zA-Z]+$/.test(value);

但这不匹配空格和重音字符。

【问题讨论】:

  • 也许您只想检查 blacklisted 字符?结果可能会更容易。否则,我宁愿使用 XRegExp 库并使用 ^[\p{L}\s]+$ 之类的东西来匹配大多数语言中包含空格或字母的字符串(尽管没有变音符号)。见jsfiddle.net/zv6tmtgy/1
  • 感谢您的想法.. 我会试一试。
  • 当然,您可以在代码中使用该库中的正则表达式来避免引用整个库,但它仍然是一个很长的正则表达式。

标签: jquery regex validation


【解决方案1】:

您可以按 unicode 范围进行匹配(有关 unicode 值,请查看this table)。试试这样的:

[a-zA-Z\u00C0-\u017F\s]+

说明:

  1. a-zA-Z 匹配大小写字符范围。
  2. \u00C0-\u017F 匹配一大块重音字符。
  3. \s 匹配空格。

let nameToCheck = "Lómöwen Thrél"
let checkValue = /^[a-zA-Z\u00C0-\u017F\s]+$/.test(nameToCheck);

document.write(checkValue ? "valid name" : "invalid name");

【讨论】:

  • @WiktorStribiżew 如果您想匹配俄语字符,请更改 unicode 范围(只需将它们添加到表达式中)。
  • 我不需要在任何地方添加它们,这是您的答案。目前,它没有帮助,因为它不符合 OP 要求。
  • @WiktorStribiżew OP 没有询问非拉丁字符。
  • 查看问题:like é and Ä, Ö, Ü etc.
  • @WiktorStribiżew 好吧,我的意思是,OP 不是试图匹配俄语名字,而是简单地匹配重音字符,争论“等”所暗示的内容是没有意义的。让 OP 接受一个有效的答案。
【解决方案2】:

我来自越南,遇到了同样的问题。但它使用â, ê, ô, ơ... 而不是Ä, Ö, Ü。在这种情况下无法正确使用正则表达式(但.+)。

这是我做过的最简单的方法:

/^[\w\sÄÖÜ]+$/.test(value);

注意:\wa-zA-Z0-9 返回 true,但空白 \s

【讨论】:

  • Same as below/above,不适用于 maaaany 名称。
  • @WiktorStribiżew 然后,您需要将该字符添加到正则表达式。正则表达式不包含字符 ик
  • @HappyCoding 这个解决方案的问题是你必须手动包含你想要允许的每个字符。最好使用范围(否则你的表达很快就会变得难以管理)。
  • @jcuenod 你。我明白。所以,这就是我说Here is the easiest way 的原因。另外,它似乎比\u00C0-\u017F短?
  • @jcuenod 我不同意。如果要匹配任何名称,则必须首先对该名称的类型进行分类。例如:美国名字不同于俄罗斯名字和越南名字。所以,检测到未知名称,我认为是:.+(任何名称)
猜你喜欢
  • 2015-07-27
  • 2023-03-29
  • 2013-07-03
  • 2023-03-22
  • 1970-01-01
  • 2011-02-11
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多