2

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

John Smith

无论如何,该网站是国际性的,名称可能是这样的,例如:

Jānis Bērziņš

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

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

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

感谢任何建议!

4

2 回答 2

6

在 UTF-8 模式下使用带有适当 Unicode 字符属性 (y/ies)的正则表达式。

于 2012-02-16T14:26:37.303 回答
2

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

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

请参阅regular/expressions.info上的 unicode 属性概述

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

$s = "Jānis Bērziņš";
preg_match("/^\\pL+( \\pL+)*$/", $s, $matches);
于 2012-02-16T14:33:09.333 回答