Esta función falla con las letras acentuadas y con las e?es. Por tanto, no sirve para los caracteres UTF-8.
El siguiente código falla para na cadena = "María Ma?as", no reconoce ni la "í" ni la "?":
function validarNombreYApellidos ($cadena, $selector)
{
/* Se admiten las letras (he puesto sólo las mayusculas,
porque paso la cadena con el nombre o
el apellido a mayúscula antes de hacer la comparación),
las vocales acentuadas, la diéresis,
las e?es, los espacios en blanco y el guión
(para los apellidos compuestos)*/
$caracteresPermitidos =
array ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "?", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
"Y", "Z", " ", "á", "é", "í", "ó", "ú", "ü", "-");
$correcto = true;
// ?La cadena está vacía?
if (empty ($cadena))
{
$correcto = false;
}
else
{
$nombreOapellido = mb_strtoupper ($cadena, "utf-8");
$longitudCadena = mb_strlen ($cadena, "utf-8");
for ($i = 0; ($i < $longitudCadena) && $correcto; $i++)
{
if (!in_array ($nombreOapellido [$i],
$caracteresPermitidos))
{
// Se ha encontrado un carácter no permitido
$correcto = false;
}
}
}
return $correcto;
}