Skip to content

Instantly share code, notes, and snippets.

@patovd
Last active October 24, 2020 17:20
Show Gist options
  • Save patovd/6fc1e702091b5ef4d8d3ee5f52b46bc7 to your computer and use it in GitHub Desktop.
Save patovd/6fc1e702091b5ef4d8d3ee5f52b46bc7 to your computer and use it in GitHub Desktop.
Aprende a usar expresiones regulares para validar tus datos en Google Forms

Formularios de Google un nivel más allá: Validación de datos con Expresiones Regulares.

Seguro conoces esta historia. Creas con emoción un Google Form para registrar la respuesta de cientos de usuarios, estos responden y pronto te desilusionas porque ¡las respuestas están escritas de formas tan diferentes! Números de teléfono con y sin el +, con guiones y sin estos, con espacios, sin espacios, paréntesis… Y claro, el Form solo te dejaba escoger entre texto o número, así que te agarras la cabeza pensando en todo el tiempo que gastarás formateando a mano cada dato para que puedas usar bien la información recolectada.

Abrumador, ¿no?

No, no te abrumes. Hay un camino mejor que corregir celda por celda. Uno que potenciará la toma de datos para que se ingresen como tú desees y evitando tener que corregirlos después. Me refiero a las Expresiones Regulares.

¿Expresiones Regulares?

Piensa en los nombres en general. Salvo que seas XÆA-12 Musk, normalmente los nombres tienen patrones en común:

  1. Están conformados por letras.
  2. No tienen espacios entre estas letras.
  3. No tienen números ni símbolos.
  4. Tienen al menos 3 letras.

Las Expresiones Regulares (RegEx) son una forma de convertir esos patrones en una secuencia de caracteres -o sea, una expresión- que te ayudará definir si un texto en particular cumple con tales patrones. Parecen un idioma extraño, pero no. Sígueme con atención y verás lo fáciles que son.

Para usarlas en un Google Form activa la Validación de Respuestas en el menú de 3 puntos al final de la pregunta que estás creando.

Y en las nuevas opciones que aparecen en la pregunta, selecciona Expresión Regular y Contiene.

Validemos un nombre

Veamos nuestro primer patrón en común: conformados por letras.

Entre todos los tipos de caracteres que existen, necesitamos definir que el nombre solo tenga cierta clase o tipo de caracteres: letras. No símbolos. No números. Para definir una expresión que tenga una clase de caracteres usamos corchetes [ ] y para expresar rangos de caracteres usamos guión -. Por tanto, una expresión que solo considere las letras se puede expresar así:

[A-Za-z]

¡Nuestra primera Expresión Regular! Con esa expresión estamos diciendo que nuestro patrón contiene todas las letras mayúsculas y minúsculas de la A a la Z (sin los guiones solo serian las letras A, a, Z, z). ¡Bien hecho!

Ah, pero ahí no están las vocales con tildes, diéresis ni letras como eñe y la cedilla. Tendremos que añadirlas una por una, así:

[A-Za-záãäéëêíîóöúüñç]

Ya tenemos todos los caracteres que puede tener un nombre. Pero ahí solo estamos expresando letras por separado, no palabras. La expresión validará carácter por carácter nuestro nombre, no como un bloque de caracteres. Para solucionar esto debemos usar contadores de llaves { }.

Si indicas {3} nuestra expresión exigirá 3 caracteres exactos de lo que tenga justo antes de las llaves para validar el nombre. Si indicas {3,9} el patrón exigirá entre 3 a 9 caracteres. Si no indicas un número después de la coma no tendrás límite de caracteres. Como nuestro cuarto patrón nos dice que son mínimo 3 letras sin indicar máximo, debemos corregir nuestra expresión así:

[A-Za-záãäéëêíîóöúüñç]{3,}

Ahora, un dato freak: hay usuarios que suelen poner espacios después de un texto (no me preguntes por qué, simplemente lo hacen). Si dejamos la expresión como está, alguien que ingrese su nombre con un involuntario espacio al final verá un error de validación sin entender porqué. Lo solucionamos añadiendo un espacio en blanco con la clase predefinida \s seguida del carácter ? que indica que ese espacio es opcional:

[A-Za-záãäéëêíîóöúüñç]{3,}\s?

Estamos casi listos. Solo nos faltaría indicar que el nombre comience con el rango de letras y termine con el espacio opcional. Para indicar esto usamos el acento circunflejo ^ al comienzo y el signo dólar $ al final. Si no indicamos el comienzo y final de la expresión con ^ y $, esta no servirá.

^[A-Za-záãäéëêíîóöúüñç]{3,}\s?$

¡Ahora sí! Hemos creado una expresión, un patrón que le dirá al Form cómo debe ser el formato del nombre que los usuarios ingresen. Si te fijas, cumple con los 4 patrones que definimos al comienzo. Si un usuario ingresa algo diferente a esta expresión (números, signos, espacios entre palabras) no se cumplirá el patrón y obtendremos un error.

Bonus: Podemos tomar lo que hicimos para asegurarnos que el usuario ingrese dos apellidos, no uno. Usamos dos veces seguidas la expresión anterior, pero no dejando al medio el $ (porque es de cierre) y forzando el espacio en blanco después de la primera palabra al quitar el ? que lo volvía opcional. Nos queda:

^[A-Za-záãäéëêíîóöúüñç]{3,}\s[A-Za-záãäéëêíîóöúüñç]{3,}\s?$

Valida el formato de un Número de Identificación.

En Chile el número de identificación se llama RUT. Tiene siete u ocho dígitos del 0 a 9, seguidos de un guión y el “dígito verificador” que también es del 0 a 9 o una letra K. Un formato válido de RUT puede ser 17433007-5 o 9322955-K.

Ya aprendimos cómo expresar todo esto, excepto el guión. Sabemos que el guión sirve para expresar rangos, es un carácter “reservado” de las regex. Para quitarle esa reserva debemos escaparlo con una barra invertida \. Con ello, el formato de un RUT chileno se expresa así:

^[0-9]{7,8}\-[0-9kK]{1}$

Es decir, comenzamos con un rango de siete u ocho dígitos de 0 a 9, seguidos de un guión. Luego un rango de 1 carácter que puede ser un dígito de 0 a 9 o una letra K que termina la expresión.

También el RUT se puede indicar con puntos separadores de miles. Es decir 17.433.007-5 o 9.322.955-K. Podemos modificar la expresión de esta forma para considerar los puntos:

^\d{1,2}\.\d{3}\.\d{3}\-[\dkK]{1}$

Ah sí, lo notaste. [0-9] lo puedes expresar también con la clase predefinida \d, es lo mismo. Hay muchas clases predefinidas que te ahorrarán escritura en tus expresiones y que puedes aprender. 



Validemos el formato de un número de teléfono.

Formatos de números de teléfono hay muchos. Con lo que aprendiste hasta acá, puedes definir el patrón que quieras. Ya sabes incorporar espacios, guiones, clases predefinidas, escapar caracteres reservados como { } - . ( ) + , así que solo te dejaré un par de ejemplos:

Chile: +56900000000

^\+569\d{8}$

Colombia: +57 000 0000000

^\+57\s\d{3}\s\d{7}$

Estados Unidos: +1 (000) 000-0000

^\+1\s\(\d{3}\)\s\d{3}\-\d{4}$

Esto es solo el comienzo

Con lo que aprendiste ya puedes llevar tus Google Forms a nivel mayor validando mejor los datos. Prueba tus expresiones en sitios como regex101.com.

Las Expresiones Regulares pueden ser tan complejas y potentes como necesites. Este tutorial es solo una muestra del poder de estas expresiones. Hay más reglas y funciones predefinidas que puedes aprender en el Curso de Expresiones Regulares de Platzi ya mismo. Aprueba el curso y sorprende al mundo con Forms increíbles.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment