Expresiones regulares (2)


str_replace() de PHP en Javascript

El otro día me dio por buscarlo y me di cuenta de que la gente estaba haciendo funciones propias para imitar a str_replace de php en javascript. Es curioso, ya que javascript tiene su propia versión de forma nativa.

Por ejemplo para cambiar un guión bajo por un espacio:

// En ocasasiones puede interesar utilizar nbsp en vez de un espacio
cadena = cadena.replace(/_/g," ");
// El mismo ejemplo con un espacio normal
cadena = cadena.replace(/_/g," ");

Ese ejemplo es utilizando expresiones regulares, pero también se puede utilizar con porciones de cadena:

cadena = 'Buenos tiempos';
cadena = cadena.replace("Buenos","Malos");
alert(cadena); // Mostraría "Malos tiempos"

Recomiendo visitar esta página para aprender a utilizar las expresiones regulares de javascript y leer los comentarios de este articulo para entender mejor el uso de replace. Antes de que me crucifiquen, ya sé que este articulo es muy simple y no explica con demasiada amplitud el uso de replace (de ahí que proponga dos enlaces para entenderlo mejor).




RegEx I, sólo letras, números y espacios.

No es ningún secreto que las expresiones regulares son aún un campo casi desconocido para mí, aunque las haya usado muchas veces casi ninguna han sido hechas por mi… de manera que, para no tener que ir buscando en google la expresión correcta cada vez que quiera utilizarla – y ya de paso intentar subir pagerank xD – haré una guia serie de ejemplos usables.

Este es el primero:

Detectar si una cadena contiene algo que no sean letras, numeros, espacios o guiones – las letras sin acentos.
Código:

$dirname=trim($dirname);
if (!ereg("^[a-zA-Z0-9[:space:]]*$",$dirname)
   or (strlen($dirname<1) or (strlen($dirname)>30)){
   die('ERROR! Puede que el nombre de la carpeta no cumpla las condiciones.');
}

En este caso además comprueba el tamaño de la cadena.

Con trim() eliminamos los saltos de linea y espacios que haya al inicio y al final de la cadena, y la cadena en cuestión estará guardada en $dirname.