Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/03/2008, 15:30
mass
 
Fecha de Ingreso: octubre-2007
Mensajes: 7
Antigüedad: 16 años, 6 meses
Puntos: 0
Validar caracteres especiales (acentos, etc)

Buenas compañeros.

Trabajo con Symfony pero el problema que tengo creo que no tiene nada que ver con esto.
Resulta que tengo un textarea y quiero validar el texto introducido por los usuarios para permitir texto y números. Mi aplicación es i18n, por ahora me centro en castellano e inglés pero puedo introducir nuevos idiomas en un futuro.

Estoy probando una expresión regular para validar ese textarea:
Código:
/^\w+$/i
Pero siempre me encuentro con el problema de los acentos, que no me los pasa, ni las ñ's.

Leyendo la documentación de PHP veo que \w valida todas las letras de los diferentes idiomas, segun el locale establecido con setLocale(), creo, así que debería funcionar, pero nada.
No quiero validar los caracteres acentuados uno a uno, porque si más adelante introduzco más idiomas me voy a encontrar con el mismo problema, además que no me parece una solución demasiado correcta.

Como ya estoy de los nervios me he creado un simple archivo php con el siguiente código:
Código:
<?php
echo "before:".(setlocale(LC_ALL, 0))."<br />";
setlocale(LC_ALL, "es_ES.utf-8");
echo "after:".setlocale(LC_ALL, 0)."<br />";

function check($string)
{
  return preg_match("/^\w+$/i",$string);
}

echo check("aáa").'<br />';    // MUST RETURN TRUE 1
echo check("á1").'<br />';     // MUST RETURN FALSE 0
echo check("aaa").'<br />';    // MUST RETURN TRUE 1
echo check("aá3").'<br />';    // MUST RETURN FALSE 0
?>
Y el resultado que obtengo es:
Código:
before:C
after:es_ES.utf-8
0
0
1
0
Osea que ni con un simple archivo me funciona.
He probado usando \d para validar número y si funciona, pero con letras acentuadas nada.
Ni siquiera se si setLocale() tiene algo que ver con mi problema. Estoy venga a leer foros y no encuentro una solución, incluso he leido que tiene que ver con el sistema operativo del servidor... esto es así? Por si ayuda yo trabajo con mi servidor Linux (Ubuntu).

Nada más. Perdón si me he enrrollado demasiado y gracias a todos.