Принять международные имена в RegEx

Я всегда боролся с RegEx, поэтому простите меня, если это может показаться ужасным подходом к решению моей проблемы.

Когда пользователи вводят имя и фамилию, я начал использовать только базовые, проверьте верхний и нижний регистр, пробел, апострофы и дефисы

if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error } 

Теперь я понимаю, что это не самое лучшее, поскольку у людей могут быть такие вещи, как: д-р Мартин Лютер Кинг-младший (с запятой и полным ходом). Поэтому я предполагаю, что, изменив его на это, он будет несколько более эффективным.

 if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error } 

Затем я увидел имя девушки, которое я знаю на своем Facebook, который написал ее имя как Siân, что заставило меня задуматься о именах, которые содержат умлаутов, а также о японских и китайских / корейских / русских персонажах. Поэтому я начал искать и находить способы, записывая каждый из этих персонажей в таком виде.

 if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error } 

Как вы можете себе представить, это очень длинный ветер, и я вполне уверен, что существует гораздо более простой RegEx, который может достичь этого. Как я уже сказал, я искал, но это лучшее, что я могу сделать.

Итак, что такое хороший способ проверить символы верхнего и нижнего регистра, запятые, полные остановки, апострофы, гипсы, умлауты, латынь, японский / русский и т. Д.

Related of "Принять международные имена в RegEx"

Вы можете использовать класс символов Unicode. \pL охватывает почти все символы букв.
http://php.net/manual/en/regexp.reference.unicode.php

  if (!preg_match("/^[a-zA-Z\s,.'-\pL]+$/u", $name)) 

См. Также http://www.regular-expressions.info/unicode.html , но будьте осторожны, что PHP / PCRE понимает только сокращенные имена классов.

\pL уже включает az и AZ , поэтому упомянутый шаблон "/^[a-zA-Z\s,.'-\pL]+$/u" можно упростить до

"/^[\s,.'-\pL]+$/"

также не требуется модификатор u .

Вероятно, возможно, будет некоторое ослабление квалификаций, разрешив другие типы пунктуации.

Одна вещь, которая должна быть ограничением, требует хотя бы одной буквы.
Изменение регулярного выражения марио:

if (!preg_match("/^(?:[\s,.'-]*[a-zA-Z\pL][\s,.'-]*)+$/u", $name))