【问题标题】:How to check that string contains letter in any language?如何检查字符串是否包含任何语言的字母?
【发布时间】:2012-03-07 22:45:30
【问题描述】:

我当前的正则表达式是/^[a-zA-Z]+( [a-zA-Z]+)*$/。它适用于以下名称:

John Smith

无论如何,网站是国际化的,名称可以是这样的,例如:

Jānis Bērziņš

这是一个有效的名称,但由于 ā、ē 和 š 字符,正则表达式将无法验证它。

一种方法是键入所有允许的字符,但列表会很庞大!

我正在寻找更简单的方法来做到这一点。也许是黑名单而不是白名单?

感谢您的任何建议!

【问题讨论】:

  • 你只需要它来命名吗?如果是这样,白名单方法应该就可以了
  • 您不应该首先尝试验证名称。除了字母之外,它们还可以包含更多符号。

标签: php regex validation unicode letter


【解决方案1】:

在 UTF-8 模式下使用带有 the appropriate Unicode character propert(y/ies) 的正则表达式。

【讨论】:

  • 类似的东西。您可能需要 一些 标点符号(-、' 等)。
【解决方案2】:

只需将您的字符类替换为字母 \pL 的 unicode 属性

/^\pL+( \pL+)*$/

参见here on regular/expressions.info unicode 属性概述

在我对writecodeonline.com 的测试中,这是有效的

$s = "Jānis Bērziņš";
preg_match("/^\\pL+( \\pL+)*$/", $s, $matches);

【讨论】:

  • 好吧,提到Jānis Bērziņš 失败了。
  • 请将您的正则表达式更改为/^\pL+( \pL+)*$/uD,使其按预期工作。
  • @daGrevism 在我的测试中它在没有 u 修饰符的情况下按原样工作,不确定是什么原因造成的。
猜你喜欢
  • 2012-02-22
  • 2020-12-12
  • 2020-12-18
  • 2015-01-04
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多