Я всегда боролся с 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, который может этого добиться. Как я уже сказал, я искал, но это лучшее, что я могу сделать.
Итак, что является хорошим способом проверки символов верхнего и нижнего регистра, запятых, точек, апострофов, дефисов, умляутов, латыни, японского / русского и т. Д.