Как проверить, что строка содержит буквы на любом языке? - PullRequest
2 голосов
/ 16 февраля 2012

Мое текущее регулярное выражение /^[a-zA-Z]+( [a-zA-Z]+)*$/. Это работает для имен, таких как:

John Smith

В любом случае, сайт является международным, и имя может быть таким, например:

Jānis Bērziņš

Это допустимое имя, но регулярное выражение не сможет его подтвердить из-за ā, ē и š символов.

Один из способов - ввести все разрешенные символы, но тогда список будет ОГРОМНЫМ!

Я ищу более простой способ сделать это. Может быть, черный список вместо подхода белого списка?

Спасибо за любой совет!

Ответы [ 2 ]

6 голосов
/ 16 февраля 2012

Используйте регулярное выражение в режиме UTF-8 с соответствующим свойством символа Юникода (гг.) .

2 голосов
/ 16 февраля 2012

Просто замените свой класс символов свойством юникода для буквы \pL

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

См. здесь на регулярном / expressions.info обзор свойств Юникода

в моем тесте на writecodeonline.com это работает

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