miércoles, 3 de enero de 2018

Javascript Parte LXXII

Una expresión regular es una técnica que nos permite identificar si un string coincide con un patrón determinado. Un ejemplo clásico es determinar si un email está correctamente tipeado (sabemos que comienza con uno o más caracteres alfanuméricos, luego el carácter @ seguido de uno o más caracteres alfanuméricos, luego el carácter '.' y finalmente otros caracteres alfabéticos)
Sin conocer las expresiones regulares se pueden resolver estos tipos de problemas mediante una serie de if que procesan partes del string para comprobar si cumplen en conjunto todas las reglas que necesitamos validar, pero con las expresiones regulares podemos resolver este tipo de problemas con una sintaxis mucho más compacta.
Existe toda una serie de reglas para crear las expresiones regulares que iremos viendo.
El lenguaje JavaScript administra las expresiones regulares mediante el objeto RegExp:
Problema
Validar si se ingresa un valor entero con exactamente tres dígitos.
<html>
<head>
</head>
<body>

<script type="text/javascript">
  var valor=prompt('Ingrese un numero entero positivo de 3 dígitos','');
  var patron=new RegExp('^[0-9]{3}$');
  if (patron.test(valor))
    alert('Se ingresó un valor entero positivo de 3 dígitos');
  else
    alert('No se ingresó un valor entero positivo de 3 dígitos');
</script>

</body>
</html>
En este primer paso no nos importa la sintaxis dispuesta en el string que le pasamos al constructor del objeto RegExp, sino ver la sintaxis de JavaScript para crear un objeto de RegExp y seguidamente como llamamos al método test que retorna si el string 'valor' contrastado con la expresión regular definida en el objeto 'patron' verifica verdadero o falso:
  var patron=new RegExp('^[0-9]{3}$');
  if (patron.test(valor))
    alert('Se ingresó un valor entero positivo de 3 dígitos');
  else
    alert('No se ingresó un valor entero positivo de 3 dígitos');
Veremos luego que para definir expresiones regulares intervienen una serie de caracteres ^ $. * +? =! : | \ / () [] {} que tienen un significado especial en la definición del lenguaje de expresiones regulares, estos tipos de caracteres suelen llamarse metacaracteres.
El mismo problema se puede expresar utilizando una sintaxis distinta para la creación de la expresión regular (esta otra sintaxis es muy utilizada, pero en el fondo el interprete de JavaScript crea un objeto de tipo RegExp):
<html>
<head>
</head>
<body>

<script type="text/javascript">
  var valor=prompt('Ingrese un numero entero positivo de 3 dígitos','');
  var patron=/^[0-9]{3}$/;
  if (patron.test(valor))
    alert('Se ingresó un valor entero positivo de 3 dígitos');
  else
    alert('No se ingresó un valor entero positivo de 3 dígitos');
</script>

</body>
</html>
Como podemos ver al definir la variable patron le asignamos una cadena encerrada entre los caracteres '/' (recordar que estamos creando un objeto de tipo RegExp):
  var patron=/^[0-9]{3}$/;
Problema
Ingresar una oración por teclado y luego imprimir un mensaje si la oración ingresada contiene la palabra 'hora'
<html>
<head>
</head>
<body>

<script type="text/javascript">
  var oracion=prompt('Ingrese una oración','');
  var patron=/hora/;
  if (patron.test(oracion))
    alert('La oración ingresada contiene la palabra \'hora\'');
  else
    alert('La oración ingresada no contiene la palabra \'hora\'');
</script>

</body>
</html>
Es muy posible que este primer problema convenga utilizar el método indexOf del objeto string pero para introducir el concepto de expresiones regulares es lo más sencillo. Estamos declarando la expresión regular:
  var patron=/hora/;
Con esta definición especificamos que el patrón a comparar son los caracteres 'hora'. Luego al llamar al método test donde le pasamos el string a comparar verifica si el patrón 'hora' está contenido en alguna posición del string 'oración'.
El método test se verifica verdadero si ingresamos las siguientes oraciones:
Es hora de partir.
hora de comer.
Pasó muchas horas corriendo.
Ahora tenemos ganas de correr.
Se verifica falso si ingresamos la siguiente oración:
El niño ora.
Hora de comer.

No hay comentarios.:

Publicar un comentario