Otro de mis pequeños proyectos

Mis expresiones regulares favoritas

A raí­z de mi post anterior sobre 5 expresiones regulares que todo programador web deberí­a conocer, me ha parecido interesante añadir unas cuantas más que, aunque quizás no sean nada del otro mundo, me parecen muy útiles y seguro que ayudan a más de uno.

Validar un número entero

Esta es realmente sencilla y muy muy útil, sobre todo si trabajar con cadenas de texto o lenguajes de programación no tipados. En PHP hay por ejemplo funciones como is_number() que hacen una función parecida.

Comprueba si todos caracteres del string son dí­gitos.

/^\d+$/

O, de forma equivalente:

/^[0-9]+$/

Atentos que la cadena vací­a no pasa esta expresión, es necesario que haya al menos un dí­gito. Si quieres permitir que esté vací­o, entonces cambia el + por *.

Validar un número decimal

Esta es una extensión la anterior. Acepta tanto número positivos como negativos y que el separador de decimales sea coma o punto:

/^-?[0-9]+([,\.][0-9]*)?$/

Validar opciones de entrada

Aunque no siempre, viene muy bien cuando tenemos unos cuantos parámetros y no queremos usar if($a == ‘a’ || $a == ‘b’ || $a == ‘c’) y todo lo largo que queráis el if.

La siguiente expresión comprueba si la variable es a, b, c, otro o mas:

/^(a|b|c|otro|mas)$/

En PHP, con un preg_match, la papeleta está solucionada. Por ejemplo:

if(!preg_match('/^(a|b|c|otro|mas)$/', $a) {
 // Si entra es que no hay coincidencias
 return null;
}

Tras estas lí­neas, $a es sólo una de las opciones indicada y si no, habrá retornado null.

Extraer cierta parte de un texto

Partiendo de que tenemos una cadena de caracteres en $text y sabemos que en alguna parte suya cumple que tiene una cadena de texto (por ejemplo ‘jugador’) y un número separados por un guión (es decir, por ejemplo ‘jugador-15’) y queremos conocer ese número porque es su identificador. Podemos usar:

preg_match('/player-(\d+)/', $text, $matches);
$id = $matches[1];

Tras estas lí­neas, en $id tenemos nuestro número.

Esta expresión se puede extender todaví­a un poco más si el texto a buscar lo tenemos en una variable, por ejemplo $buscar.

En PHP podemos hacer:

preg_match('/' . $buscar . '-(\d+)/', $text, $matches);
$id = $matches[1];

Si estás usando javascript, el equivalente para este último caso es:

var buscar = 'player';
var m = texto.match(new RegExp(buscar + '-(\d+)'));
var id = m[1];

Y hasta aquí­ da mi memoria de momento. Cuando me acuerde de alguna otra, ya las iremos posteando.

6 comentarios

  1. Jorge

    Y cómo harí­a para que no me permita el ingreso de un numero seguido sólo por punto o coma por ejemplo:
    15.
    233,

  2. tatai

    Hola Jorge,

    Yo forzarí­a que hubiese más números:

    [0-9]+[,\.][0-9]+

    Es decir, se leerí­a: un número de al menos un dí­gito, luego coma o punto y luego un número de al menos un dí­gito.

    Espero que te sirva

  3. Jorge Luis

    Hola disculpa como se podrí­a hacer una expresión para que no me acepte los 0 y -1 SOLO pueda aceptar cantidades así­ ejemplo: 1 o un 10

  4. tatai

    Hola Jorge, si te entiendo bien, quieres que sólo se aceptan números positivos y no se incluya el cero. Si es así­, con algo del estilo /^[^0][0-9]*$/, es decir, que el primer dí­gito no sea cero, lo que excluye el menos también y luego la cantidad de dí­gitos que hagan falta.

    No obstante, una buena solución serí­a convertir la cadena a entero y a partir de aquí­, hacer la comprobación > 0

  5. Jorge Luis

    Si es lo que quiero Tatai aun no encontrado una buena solucion eh logrado que no acepte los 0 ni los -1. Pero solo que no eh podido hacer que me acepte despues del primer digito el 0 es decir el 10, 20 etc.

  6. Jorge Luis

    Si cuentan con alguna funcion en javascript o exprecion regular que me sirva les agredeceria mucho

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *