Siempre he tenido problemas con RegEx, así que discúlpeme si esto puede parecer un enfoque horrible para abordar mi problema.Aceptar caracteres de nombre internacional en RegEx
Cuando los usuarios están entrando nombres y apellidos Empecé simplemente utilizando la básica, la verificación de mayúsculas y minúsculas, espacios en blanco, apóstrofes y guiones
if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }
Ahora me doy cuenta de que esto no es el mejor desde la gente podría tener cosas como: Dr. Martin Luther King, Jr. (con coma y fullstops). Así que supongo que al cambiarlo esto lo haría un poco más efectivo.
if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }
entonces vi un nombre de chicas que conozco en mi Facebook que escribe su nombre como Sian, que me hizo pensar de los nombres que contienen diéresis, así como dicen los caracteres japoneses/chino/coreano/ruso también. Así que comencé a buscar y encontré formas escribiendo cada uno de estos caracteres como tal.
if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error }
Como se puede imaginar, es extremadamente largo aliento y estoy bastante seguro de que es una expresión regular mucho más simple que se puede lograr esto. Como he dicho, he buscado, pero esto es lo mejor que puedo hacer.
Por lo tanto, lo que es una buena manera de comprobar los caracteres en mayúsculas y minúsculas, comas, puntos, apóstrofes hypens, diéresis, América, japonés/ruso etc
Eso NO FUNCIONARÁ a menos que se normalice primero, y con frecuencia ni siquiera entonces. – tchrist