Expresiones regulares: metacaracteres de cuantificadores alternativos * ? + |
La sintaxis de las expresiones regulares define tres metacaracteres que pueden utilizarse en lugar de la sintaxis vista en el concepto anterior.
Caracteres:
? busca cero o una ocurrencia en el string remplaza a {0,1} * busca cero o más ocurrencias en el string remplaza a {0,} + busca una o más ocurrencias en el string remplaza a {1,}
Ingresar una palabra por teclado y validar que tenga al menos una vocal.
<html> <head> </head> <body> <script type="text/javascript"> var palabra=prompt('Ingrese una palabra con al menos una vocal:',''); var patron=/[aeiou]+/; if (patron.test(palabra)) document.write('La palabra ingresada tiene al menos una vocal'); else document.write('La palabra ingresada no tiene vocales'); </script> </body> </html>
La expresión regular planteada utiliza el metacaracter + :
var patron=/[aeiou]+/;
Con esto se analiza cada letra del string y si al menos uno tiene una vocal luego el método test de la expresión regular se verifica verdadera.
Utilizando la otra sintaxis la expresión sería:
var patron=/[aeiou]{1,}/;Problema
Ingresar un valor numérico entero que podemos opcionalmente antecederle alguno de los caracteres: + o -.
<html> <head> </head> <body> <script type="text/javascript"> var valor=prompt('Ingrese un valor numérico entero, puede anteceder el +/-:',''); var patron=/^[\+\-]?[0-9]+$/; if (patron.test(valor)) document.write('Tiene un formato correcto'); else document.write('Formato incorrecto'); </script> </body> </html>
El patrón queda definido con la siguiente sintaxis:
var patron=/^[\+\-]?[0-9]+$/;
Es decir con la sintaxis ^[\+\-]? estamos indicando que el primer carácter debe ser un + o - y como fuera de los corchetes indicamos el carácter ? que indica que busca cero o una ocurrencia (es decir es opcional disponer el + o -)
Luego indicamos con la sintaxis [0-9]+$ que se debe ingresar uno o más dígitos (con es +) y debe finalizar con un dígito.
Es test se verifica correcto si ingresamos:
1200 +300 -55
e incorrecto si ingresamos:
10z55 +34aa2 +-20 +++34Problema
Ingresar un valor numérico entero o real, se debe validar que se ingrese al menos un número previo al operador punto que es opcional y finalizar con un número obligatoriamente.
<html> <head> </head> <body> <script type="text/javascript"> var valor=prompt('Ingrese un valor numérico entero o real:',''); var patron=/^[0-9]+\.?[0-9]+$/; if (patron.test(valor)) document.write('Tiene un formato correcto'); else document.write('Formato incorrecto'); </script> </body> </html>
La expresión comienza con ^[0-9]+ lo que significa que se debe ingresar en la primer posición un dígito. Luego es opcional el carácter . ya que empleamos el metacaracter de interrogación \.? y finalmente debe terminar con un dígito obligatoriamente [0-9]+$