Las expresiones regulares son una forma de describir cadenas de caracteres que sirven para comparaciones y reemplazos complejos. Por ejemplo si escribimos en la línea de comandos de windows dir *.exe, eso es una expresión regular que define todas las cadenas de caracteres que empiecen con cualquier cosa seguida de .exe, es decir, todos los archivos .exe. La acción de comparar la cadena de texto con el patrón que le hemos dado (la expresión regular) se denomina reconocimiento de patrones (pattern matching).
En Javascript las expresiones regulares se basan en las de Perl, de forma que son muy muy parecidas y se representan por el objeto RegExp (de REGular EXPresion). Para crear una expresión regular podemos usar el constructor del objeto RegExp, pero es mas conveniente utilizar una sintaxis especialmente pensado para ello. Veamos un ejemplo, el mas simple posible.
var patron = /pato/;
Este es el patrón mas sencillo. En una comparación con una cadena devolvería true en el caso de la cadena con la que se compara sea “pato”. Todos los patrones se escriben entre barras invertidas, así como las cadenas de texto se escriben entrecomilladas. La otra forma de crear el objeto RegExp es como deciamos utilizando su constructor.
var patron = new RegExp(“pato”);
Pero en este caso lo que le pasamos al constructor es una cadena, por lo tanto en lugar de usar / lo entrecomillamos. Para complicar un poco mas las cosas supongamos que queremos comprobar si la cadena que nos pasan es pato, pata o pate. Entonces usariamos los corchetes, que indican opción, es decir, al comparar con /[aeo]/ devolvería cierto en caso de que la cadena fuera la letra a, la e o la letra o.
var patron = /pat[aeo]/;
¿Y si quisieramos comprobar si la cadena es pat0, pat1, pat2, …, pat9? En lugar de tener que encerra los 10 dígitos dentro de los corchetes podemos utilizar el guión, que sirve para indicar rangos. Por ejemplo 0-9 serían todos los números de 0 a 9 inclusive.
var patron = /pat[0-9]/;
Si quisieramos por ejemplo que el último caracter fuera o un dígito (0-9) o una letra minúscula (a-z) simplemente se escribirían dentro de los corchetes un criterio detras de otro.
//pat seguido de un número o letra minúscula
var patron = /pat[0-9a-z]/;
//ahora también puede estar seguido de una A mayúscula
var patron2 = /pat[0-9a-zA]/;
¿Y que ocurriría si en lugar de tener solo un número o una letra minúscula quisieramos que pudieran haber varias, pero siempre minúsculas o números? Entonces recurrimos a +, *, ? y {}. + indica que lo que tiene a su izquierda puede estar 1 o mas veces, * indica que puede estar 0 o mas veces (en el caso de + el número o la minúscula tendría que aparecer al menos una vez, con * pat también se aceptaría), ? indica opcionalidad, es decir, lo que tenemos a la izquierda puede o no aparecer (puede aparecer 0 o 1 veces) y por último {} sirve para indicar exactamente el número de veces o que puede aparecer o un rango. Por ejemplo {3} indicaría que tiene que aparecer exactamente 3 veces, {3,8} indicaría que tiene que aparecer de 3 a 8 veces y {3,} tres veces o mas (las que sean). Hay que tener cuidado porque {} exige que se repite lo último, cuando no se esté seguro de lo que va a hacer usamos (). Para ilustrar esto vamos a ver un primer ejemplo real con expresiones regulares:
<script>
var patron = /pat[ao]{2}/;
document.write(“patopata”.search(patron));
document.write(“patoa”.search(patron));
patron = /(pat[ao]){2}/;
document.write(“patopata”.search(patron));
document.write(“patoa”.search(patron));
</script>
La función search del tipo de objeto de String (asociado a las cadenas de caracteres) comprueba si la cadena representada por el patrón que le pasamos como argumento se encuentra dentro de la cadena sobre la que se llama a search. En el caso de que así sea devuelve la posición (por ejemplo para la cadena pato con el patron /p/ devolvería 0, 1 si el patrón es a, 2 si es t,…) y -1 si no se encuentra. Otra función útil que merece la pena comentar es cadena.replace(patron, sustituto), que sustituye en la cadena sobre la que se llamó las ocurrencias del patrón por la cadena especificada
Si ejecutamos el programa anterior la salida por pantalla será -100-1, es decir, la primera y última llamada a search devuelven no encontrado y la segunda y las otras dos encuentran la cadena en la posición 0. Si nos fijamos vemos que esto es obvio. El patrón que definimos primero, /pat[ao]{2}/ incluye las cadenas “pataa”, “patao”, “patoo” y “patoa”, ya que lo que indica {2} que debe repetirse dos veces es [ao], no pat[ao]. Sin embargo cuando redefinimos el valor del patron utilizamos los paréntesis de forma que {2} se aplique sobre pat[ao].
Otro elemento interesante en las expresiones regulares es la especificación de las posiciones en que se tiene que encontrar la cadena, esa es la utilidad de ^ y $, que indican que el elemento sobre el que actúa debe ir al principio de la cadena o al final de esta.
//buscamos “oo” y que se encuentre al principio de la cadena en la que esté
var patron = /^aa/;
//buscamos uu al final de la cadena
patron = /uu$/;
Otros elementos a tener en cuenta son:
- \d un dígito. Equivale a [0-9]
- \D cualquier caracter que no sea un dígito.
- \w Cualquier caracter alfanumérico. Equivalente a [a-zA-Z0-9_].
- \W cualquier caracter no alfanumérico
- \s espacio
- \t tabulador
Les dejo algunas validaciones, espero que les sirva, una es para un cuit o algo que les ayude con guiones, y otra es una de un e-mail muy completa que utilizo, saludos, Sebas.
E-MAIL: /^\D+([\.-a-z0-9]+)*@\D+([\.-a-z0-9]+)*(\.\D{2,3})+$/;
CUIT: /(^([0-9]{2}(\-?))([0-9]{8}(\-?))([0-9]{1}))$/
esa expresion tambien me sirva para validar un textbox en c#.
Expresion Regular Rut Chileno
^\d{1,2}\d{3}\d{3}[-][0-9kK]{1}$
la funcion para validar un textbox con el rut chileno en lenguaje VB.NET 2005, recordar declarar arriba al principio de la pagina Imports System.Text.RegularExpressions y luego… el rut , sin puntos, pero con guion seria….en el evento click del boton…
If Not IsDBNull(RutTextBox.Text) _
AndAlso Not String.IsNullOrEmpty(RutTextBox.Text) Then
Dim Txt = RutTextBox.Text Dim Reg As New Regex(“^\d{1,2}\d{3}\d{3}[-][0-9kK]{1}$”) ‘(“/^([0-9])+\-([kK0-9])+$/”)
Dim m As Match = Reg.Match(Txt)
If m.Success Then
Else
MsgBox(“Debe ingresar un rut válido”)
RutTextBox.Focus()
End If
End If
Eduardo Escanilla A.
Programador.
PD: como dijo Jorje Andrade Le falta el Modulo 11 😛 Saludos 🙂
Quisiera saber un patron, donde me deje entrar de la a-z y A-Z pero con las vocales tíldadas también.
Ejemplo: Irving López
Mil Gracias
hola como seria la exp regular para restringir el ingreso de datos en un formulario de la forma:
Solo se permiten en formato “nombre1 nombre2 apellido1 apellido2” estrictamente
Solo se permiten tener de 5 a 10 caracteres sin puntos estrictamente.
El peso sólo puede tener caracteres numéricos desde 1 hasta 120 estrictamente
Todas las direcciones solo serán de tipo “nombreusuario@dominio.com” (puede ser .net o .org) estrictamente
Escriba su fecha de naciemiento de esta forma dd-mm-aaaa o dd/mm/aaaa estrictamente
tengo de esta forma pero no em funciona:
function verificar(){
var nueva = new RegExp(“^[a-zA-Z]\s[a-zA-Z]\s[a-zA-Z]\s[a-zA-Z]$”);
cadena = document.getElementById(“username_reg”).value;
if (nueva.test(cadena)){
document.getElementById(“mensaje”).innerHTML=(“ok”);
}
else{
document.getElementById(“mensaje”).innerHTML=(“dato no valido”);
}
var nueva1 = new RegExp(“^\d{5,10}$”);
dato = document.getElementById(“cedula_reg”).value;
if (nueva1.test(dato)){
document.getElementById(“mensaje1”).innerHTML=(“ok”);
}
else{
document.getElementById(“mensaje1”).innerHTML=(“dato no valido”);
}
var nueva2 = new RegExp(“if(isNaN(peso)||peso120)”);
dato1 = document.getElementById(“peso_reg”).value;
if (nueva2.test(dato1)){
document.getElementById(“mensaje2”).innerHTML=(“ok”);
}
else{
document.getElementById(“mensaje2”).innerHTML=(“dato no valido”);
}
var nueva3 = new RegExp(“/^\w+([\.-_]?\w+)*@\w+([\.-_]?\w+)*(\.\w{2,4})+$/”);
dato3 = document.getElementById(“email_reg”).value;
if (nueva3.test(dato3)){
document.getElementById(“mensaje3”).innerHTML=(“ok”);
}
else{
document.getElementById(“mensaje3”).innerHTML=(“dato no valido”);
}
var nueva4 = new RegExp(“/^\d{2}(-|\/)\d{2}(-|\/)\d{4}$/”);
dato4 = document.getElementById(“birth_reg”).value;
if (nueva4.test(dato4)){
document.getElementById(“mensaje4”).innerHTML=(“ok”);
}
else{
document.getElementById(“mensaje4”).innerHTML=(“dato no valido”);
}
}
Me gustaria saber una expresion regular que contenga obligatoriamente numero y letras.
hola… necesito saber la expresion regular para los numeros entre 4400 y 5700.
si alguien me puede colaborar se lo agradeceria
Hola.! Tengo un formulario http://www.e2wifi.net.ve/pagos.html al cual quiero validar el campo “Usuario” contra una lista en un archivo txt que contiene 2 valores por linea: usuario, mail. Una vez validado el Usuario me tome el valor mail y lo mande a una variable del formulario. Alguien sabe como hacerlo en javascript?
hola soy novato en php con javascript y quiero saber si se puede comparar el valor de un combo o select de un formulario con el valor de un text
hola buenas tardes.
Me podrian decir porque esta expresion no me detecta este texto? sera por los %?
Expresion: texto.match(/#\w{5,10}/gi);
texto = #%n%XXXXX;
Gracias
ya lo he solucionado, el % no es un dígito alfanumérico asi que hay que jugar un poco con la expresión añadiendo \W
Hola…Como puedo hacer q de una cadena de texto elimine todas las tags excepto con javascript
He visto que también ponen el pipeline (|) este para que es, que le hace a la expresión, por ejemplo:
var regex = /^Red | red$/;
Cómo sería un patrón para esto?…
00-00-000-000-000-000-000-000-000-000
Y si no es así que muestre un alert..
Gracias
Hola quisiera que me ayuden tengo un input
y que solo quisiera que me acepte numeros lo coloco en el onchange ya que tambien tienen la opcion a copiar pero estoy haciendolo asi y no me funciona me podrian ayudar tambien tengo otro input que solo acepte numeros sin caracteres especiales
function valida_numerito(obj)
{
var texto;
texto=obj.value.replace(/[A-Za-z]/,”);
alert(texto);
return texto;
}
gracias de antemano
Hola amigos!!!
He leído con atención vuestros apuntes y debo felicitaros por lo interesantes que son vuestros comentarios, que nos sirven para aprender a los que somos un poco torpes.
Y hablando de eso, quisiera saber si alguien me puede decir como puedo validar un mail, pero con dominio y extensión fija.
Me explico. Hasta ahora todos los comentarios que he visto se dirigen a que se validen mails, sin mas, es decir, “usuario@dominio.ext”.
Sin embargo llevo días intentando crear una expresión regular que solamente valide mails con dominio fijo, por ejemplo, que solamente sean válidos los mails de hotmail (usuario@hotmail.com) y ninguno mas
He probado de mil formas y no lo consigo. ¿Me podrías ayudar?
Gracias de antemano por vuestra atención!!
Gracias:)
que es:Formato Incorrecto – solo pueden ser caracteres alfanumericos, guiones y puntos
hola!!! de
hola!!! es:adinet…
hola amigos!!!!!! que es:Lo sentimos, no podemos procesar tu registro.
hola amigos!!!!!! que es:Lo sentimos, no podemos procesar tu registro.
hola a todos!!! pueden desde sus celurares aser este mensaje:Envía
CN babuzadi al 25125
Hola alguien me puede ayudar con una expresion regular para que no acepten numeros en letras, pero que no tome encuenta palabras como “todos” ya que ahi viene la palabra “dos”
Yo hice esta pero no me funciona bien:
result=frase.match(/\cero|uno|dos|tres|cuatro|cinco|seis|siete|ocho|nueve|diez|/);
Gracias de antemano
var ReNIT=/^\d{3}\.\d{3}\.\d{3}\-\d{1}$/;
expresion regular que valida el formato:
000.000.000-0
este es el formato de NIT para las empresas en colombia, pero estas no empiezan por 0.
como puedo hacer para que empiece por un numero mayor que cero?
/\mil gracias/
hola soy nuevo en esto de javascript puedo utilizar las expreciones regulares para crear un agaleria de imagenes estilo php?
les dejo mi correo i_s_ra789@hotmail.com
como hago para validar x9x9x9x9 donde x es cualquier letra y 9 es cualquier numero excepto el cero??
Como puedo hacer para que me identifique el primer valor numérico, que no tiene porque estar al principio.
Hola:
como necesito una exprecion regular para validar que se entren numeros a un textfield, que no comiensen con 0.
ejemplos
0123 no valido
1023 valido
ect…
alquien me puede ayudar necesito una expresion que me indique obligatoriedad
otra solo texto
y una de fecha de nacimiento de formato DD/MM/AAAA