Обратите внимание, что приведенный вами пример не проверяет наличие у пользователя и фамилии, и имени, хотя я бы сказал, что так и должно быть. Вы не должны предполагать, что у человека есть больше чем одно имя. В настоящее время я работаю над приложением PHP, которое имеет дело с именами людей в контексте, и если я что-то обнаружил, это то, что вы не можете делать такие предположения :) Даже у многих не знаменитостей есть только одно имя.
Использование категорий Юникод, как в \ p {L}, было хорошей идеей, поскольку да, очевидно, что в именах людей будут присутствовать всевозможные символы из других языков. Тем не менее, как и \ p {L}, вам также необходимо учитывать комбинирование меток - то есть акцентов, умлаутов и т. Д., Которые люди добавляют в качестве дополнительных символов.
Так что, может быть, сразу после \ p {L} я бы добавил \ p {Mc}
Я бы в итоге получил
preg_match('/^[\pL\p{Mc} \'-]+$/u', $name)