(。U ω U。) (̲̅r̲̅)(̲̅e̲̅)(̲̅g̲̅)(̲̅e̲̅)(̲̅x̲̅)(︶︿︶)

por | Dic 26, 2023 | Uncategorized

Tips (。U ω U。) (̲̅r̲̅)(̲̅e̲̅)(̲̅g̲̅)(̲̅e̲̅)(̲̅x̲̅)(︶︿︶)

Cada cierto tiempo debo utilizar expresiones regulares (Regex) por diferentes razones, y cada vez que voy a usarlas, debo verificar cómo se hacen según el caso. A pesar de lo frecuente que debo usar este tipo de expresiones, no logro aprender de memoria cómo se usan y la verdad es que tampoco quiero hacerlo, pues no acostumbro a memorizar información que puedo revisar fácilmente en Internet y adaptar según lo que necesito en el momento. Sin embargo, una guía fácil no vendría mal, ya que me ahorraría tiempo. Por eso he decidio hacer esta guía rápida o lista de expresiones regulares más usadas, y compartirla por aquí para que cualquiera pueda usarla.

Nota: en todos los ejemplos he usado regex101.com para verificar que sirva según el caso:

Regex para validar números:

Si se quiere validar un número de un sólo digito se puede usar:

/\d/

pero si se quiere validar un número de 3 digitos (o N), se usaría:

/\d{3}/ # or /\d{N}/

siendo N el número de digitos que se quiere identificar)

mientras que si se quiere validar un número, sin importat el número de digitos, se debería usar:

/^\d+$/

Ejemplo:

123123 => 123123
123Lorem12 => No coincide

Pero si se utiliza * en lugar de +$, tomaría cualquier cantidad de digitos que se encuentren al principio de la cadena de caracteres que se quiere evaluar, y excluye cualquier texto que venga luego: /^\d*/

Ejemplo:

123123 => 123123
123oisado12 => 123

Otra opción sería validar un número real, en cuyo caso la expresión sería:

Ejemplo:

1231.3242 => 1231.3242
7989hlk.098 => No coincide
12312.2344asda => 12312.2344

Toma en cuenta que en todos los ejemplos anteriores que inician con el caracter ^, quiere decir que el patrón que se quiere evaluar en la cadena de caracteres se encuentra al principio de la misma.

Regex para validar texto:

Para la validación de texto se usa la expresión:

/\w/

Éste incluye characteres alphanumericos, mas no characteres especiales, tales como *, !, #, etc.

Igualmente, es posible usar las expresiones

/\d{N}/ # siendo N un número entero, para identificar N caracteres, o
/^\w+$/

para identificar una cadena de caracteres, sin importar su longitud. Sin embargo, no incluye espacios en blanco, ni caracteres especiales, ni oraciones completas con múltiples palabras.

Ejemplo:

1365464asd123 => 1365464asd123
65464asd123123 => 65464asd123123
1231.3242 => No coincide
7989hlk.098 => No coincide
12312.2344asda => No coincide
!hello => No coincide

Sin embargo, si se usa el caractere *, el patrón leerá lo que consiga antes de encontrar el caracter especial:

Ejemplo:

21354654asdasd213123 => 21354654asdasd213123
1365464asd123 => 1365464asd123
65464asd123123 => 65464asd123123
1231.3242 => 1231
7989hlk.098 => 7989hlk
12312.2344asda => 12312
!hello => No coincide

Regex para validar datos de tiempo:

En este caso hay varios casos que podrían ser de utilidad, por ejemplo, el caso de la hora en formato de 12 horas:

/((1[0-2]|0?[1-2]):([0-5][0-9]) ?([YaPp][Mm]))/

Mientras que si el formato fue de 24 horas, el regex a usar sería de la siguiente manera:

/(([0-1][0-9]|2?[0-3]):([0-5][0-9]))/

Para el caso de las fechas hay que tomar en cuenta más condiciones especiales, considerando que no todos los meses tienen la misma cantidad de días. entonces, la expresión que usaríamos en este caso sería:

/^(?:3[0-1]|[1-2][0-9]|0[1-9])([-\/.])(?:0[1-9]|1 [1-2])([-\/.])(\d{4})$/
^(?:(?:3[0-1]|[1-2][0-9]|0[1-9])[-\/.](?:0[1,3,5, 7.8]|1[0,2])<a href="\d{4}">-\/.</a>|(?:30|[1-2][0-9]|0[1-9]) <a href="?:0[2,4,6,9]|11">-\/.</a><a href="\d{4}">-\/.</a>|(?:[1-2][0-9 ]|0[1-9])[-\/.]02<a href="\d{4}">-\/.</a>)$

sin embargo esta versión no hace verificaciones en caso de que la fecha corresponda a un ano biciesto.

Regex para validar correos electrónicos

Para las direcciones de correos electrónicos es posible usar la siguente expresión:

/[\w._%+-]+@[\w.-]+.[a-zA-Z]{2,4}/

Regex para validar URL

Para el caso de los URL podríamos usar la siguiente expresión:

/(https?:\/\/)?([\da-z.-]+).([a-z.]{2,6})([\/\w .-]) \/?/

Otros tips

En algunas ocaciones podría ser util asignar un nombre a un grupo en particular, y esto es posible hacerlo usando ? y debe ir enmarcado por el delimitador de grupo que se esté usando, sea [] o (), y primero que el regex usado para definir el patrón, como por ejemplo:

[(?.?)] (?.?)