Puedes probar lo siguiente:
En primer lugar ejecuta este script en tu servidor:
Código PHP:
<?php
print setlocale(LC_ALL, 0);
?>
Y comprobar que para
LC_CTYPE lo tienes efectivamente en Spanish_spain.
Si no fuese así y dependiendo del sistema operativo en que se encuentre php debes de establecer la información de localización a español:
Código PHP:
<tt>
<?php
print "antes:".(setlocale(LC_ALL, 0))."<br />";
setlocale(LC_ALL, "es_ES");
// para windows sería : setlocale(LC_ALL, "esp");
// vuelves a llamar a setlocale pasando como segundo argumento 0
// para ver si cambió la localización...
print "ahora:".setlocale(LC_ALL, 0)."<br />";
?>
</tt>
Y luego en la expresión regular referenciarías las cadenas con [[:alpha]] , por ejemplo
Código PHP:
function alphaTildes($cadena)
{
return (preg_match("/^[[:alpha:]]+$/i",$cadena));
}
print alphaTildes("holá"); // DEBE DAR TRUE 1
print alphaTildes("holá1"); // DEBE DAR FALSE 0
print alphaTildes("hola"); // DEBE DAR TRUE 1
print alphaTildes("ho22222éílá"); // DEBE DAR FALSE 0
A ver si hay suerte y te funciona, la verdad es que a mi me costó averiguarlo, porque me pidieron un buscador que diferenciase por tíldes :S
Salu2 ;) (te recomiendo que hagas algunas pruebas por ejemplo con acentos vacios o con mayúsculas acentuadas por si acaso ;) )