1 votos

Limpiar string - Solo letras

Necesito dejar únicamente letras de la 'a' a la 'z' en un string.

Para obtener letras que no incluyan eñes, diéresis, acentuadas, tengo lo siguiente:

function soloLetrasEn( $str ) {

  $patron = "/[^A-Za-z]/";
  return (preg_replace($patron, '', $str));
}

¿Cómo puedo obtener tambien las eñes? ¿y las eñes y acentuadas? Lo pregunto porque en cuanto cambio el patrón para que admita tambien eñes:

$patron = "/[^A-Za-zñÑ]/";

Casca en cuanto encuentra un acento o similar.

0voto

aEscarcha Puntos 220

El problema viene por las regex y UTF8 en PHP, que son una castaña. Prueba a añadirle el modificador u a tu regex, así:

$patron = "/[^A-Za-zñÑ]/u";

u (PCRE_UTF8) Este modificador pone en marcha funcionalidad adicional de PCRE que es incompatible con Perl. Los string de patrones y objetivos son tratados como UTF-8. Este modificador está disponible a partir de PHP 4.1.0 o posterior en Unix y desde PHP 4.2.3 en win32. La validez de UTF-8 del patrón y del objetivo es verificada desde PHP 4.3.5. Un objetivo inválido causará que la función preg_* no haga coincidir nada; un patrón inválido desencadenará un error de nivel E_WARNING. Las secuencias UTF-8 de cinco o seis octetos se consideran como no válidas desde PHP 5.3.4 (resp. PCRE 7.3 2007-08-28); anteriormente se consideraban como UTF-8 válido.

0 votos

Son un problema las codificaciones de caracteres en muchas ocasiones. Muchas gracias, parece que funciona.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: