如何检查该字符串是否包含任何语言的字母?

时间:2012-02-16 14:23:11

标签: php regex validation unicode letter

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

John Smith

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

Jānis Bērziņš

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

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

我正在寻找更简单的方法。也许黑名单而不是白名单方法?

感谢任何建议!

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

只需使用字母\pL

的unicode属性替换您的角色类
/^\pL+( \pL+)*$/

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

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

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