Foros del Web » Programando para Internet » Javascript »

Expresiones regulares

Estas en el tema de Expresiones regulares en el foro de Javascript en Foros del Web. Buenas tardes se que es una lata preguntar algo que ya se ah preguntado muchas veces pero estoy con una validacion que no me sale.. ...
  #1 (permalink)  
Antiguo 11/08/2009, 15:41
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Expresiones regulares

Buenas tardes se que es una lata preguntar algo que ya se ah preguntado muchas veces pero estoy con una validacion que no me sale..

Código js:
Ver original
  1. function validaNombre(nombre)
  2. {
  3.     var reg=/(^[a-zA-Z ÑñÁÉÍÓÚáéíóú]{15,45}$)/;
  4.     if(reg.test(nombre)) return true;
  5.     else return false;
  6. }

Código js:
Ver original
  1. if(!validaNombre(nombre)){
  2.         .....
  3.     }


Intento hacer una validacion que tenga caracteres, mayusculas y minusculas, acentos, ñ's, espacios y que tenga una longitud de 15 a 45 caracteres. pero me marca error.
  #2 (permalink)  
Antiguo 11/08/2009, 17:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Expresiones regulares

a mi me funciona perfecto. verifica que estes introducciendo la cantidad de caracteres necesario, tiene que ser un minimo de 15 caracteres y un máximo de 45 caracteres.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 11/08/2009, 20:34
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

en verdad? ami me marca error
  #4 (permalink)  
Antiguo 11/08/2009, 21:15
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Expresiones regulares

deberias haber mencionado cual es el error que te devuelve la consola, y por supuesto, en que navegador y version. muestranos un ejemplo de lo que tienes. espero que no tengas alguna libreria como mootools, jquery, etc...
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 11/08/2009, 21:49
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Pues veras zerokilled, no es un error de sintaxis, solo ingreso el nombre con las condiciones que pongo y aun asi me envia el mensaje de que el nombre contiene caracteres y longitud invalida, y tengo otra cosa, tambien verifico otros campos pero tengo un problema con el if anidado, resulta que hace la verificacion en todos, pero, si el ultimo campo verificado es correcto envia los datos aun que los otrs no cumplan la sentencia. un poco frustrante, pero como tu dics pondre los codigos para una mejor explicasion y no ocupo librerias mootools ni de ningun otro tipo.

saludos!

Código js:
Ver original
  1. function eliminaEspacios(cadena)
  2. {
  3.     var x=0, y=cadena.length-1;
  4.     while(cadena.charAt(x)==" ") x++;  
  5.     while(cadena.charAt(y)==" ") y--;  
  6.     return cadena.substr(x, y-x+1);
  7. }
  8.  
  9. function validaNombre(nombre)
  10. {
  11.     var reg=/(^[a-zA-Z ÑñÁÉÍÓÚáéíóú]{15,45}$)/;
  12.     if(reg.test(nombre)) return true;
  13.     else return false;
  14. }
  15.  
  16. function validaMatricula(matricula)
  17. {
  18.     var reg=/(^[0-9a-zA-Z]{0,8}$)/;
  19.     if(reg.test(matricula)) return true;
  20.     else return false;
  21. }
  22.  
  23. function validaIngreso(valora)
  24. {
  25.     var reg=/(^[0-9]{10,18}$)/;
  26.     if(reg.test(valora)) return true;
  27.     else return false;
  28. }
  29.  
  30. function darValor(turno) {  
  31.     if (turno.checked==true){  
  32.         document.getElementById('turno').value=turno.value;
  33.     }
  34. }
  35.  
  36. function nuevoEvento(evento)
  37.        
  38. {
  39.     var divMensaje=document.getElementById("error");
  40.  
  41.     if(evento=="ingreso")
  42.     {
  43.         var matricula=document.getElementById("matricula").value;
  44.         var nombre=document.getElementById("nombre").value;
  45.         var colegio=document.getElementById("colegio").value;
  46.         var carrera=document.getElementById("TextBoxA").value;
  47.         var turno=document.getElementById("turno").value;
  48.         var concepto=document.getElementById("concepto").value;
  49.         var pago=document.getElementById("pago").value;
  50.         var input=document.getElementById("ingreso");
  51.         var boton=document.getElementById("botonIngreso");
  52.         var valora=input.value;
  53.         var textoAccion="Ingresando...";
  54.     }
  55.     else
  56.     {
  57.         var input=document.getElementById("verificacion");
  58.         var boton=document.getElementById("botonVerificacion");
  59.         var valora=input.value;
  60.         var textoAccion="Comprobando...";
  61.     }
  62.     if(!validaNombre(nombre)){
  63.         document.sumar1.nombre.style.backgroundColor="#FFD2DB";
  64.         alert("El nombre ingresado contiene caracteres o longitud invalida.");
  65.         boton.disabled=true; document.sumar1.okay1.checked = false;
  66.     }
  67.     if(!validaMatricula(matricula)){
  68.         document.sumar1.matricula.style.backgroundColor="#FFD2DB";
  69.         alert("La matricula ingresada contiene caracteres o longitud invalida.");
  70.         boton.disabled=true; document.sumar1.okay1.checked = false;
  71.     }
  72.     valora=eliminaEspacios(valora);
  73.     if(!validaIngreso(valora))
  74.     {
  75.         document.sumar1.folio.style.backgroundColor="#FFD2DB";
  76.         alert("El folio ingresado contiene caracteres o longitud invalida.");
  77.         boton.disabled=true; document.sumar1.okay1.checked = false;
  78.     }
  79.     if(document.sumar1.total1.value=='0'){
  80.         document.sumar1.total1.style.backgroundColor="#FFD2DB";
  81.         alert("La cantidad del deposito debe ser diferente a cero.");
  82.         boton.disabled=true; document.sumar1.okay1.checked = false;
  83.     }
  84.     else
  85.     {
  86.         document.sumar1.nombre.style.backgroundColor="#ffffff";
  87.         document.sumar1.matricula.style.backgroundColor="#ffffff";
  88.         document.sumar1.folio.style.backgroundColor="#ffffff";
  89.         document.sumar1.total1.style.backgroundColor="#ffffff";
  90.        
  91.         document.sumar1.disabled=true;
  92.         input.value=textoAccion;
  93.        
  94.         var ajax=nuevoAjax();
  95.         ajax.open("POST", "comprobar.php", true);
  96.         ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  97.         ajax.send(evento+"="+valora+"&matricula="+matricula+"&nombre="+nombre+"&colegio="+colegio+"&carrera="+carrera+"&nombre="+nombre+"&colegio="+colegio+"&carrera="+carrera+"&turno="+turno+"&concepto="+concepto+"&pago="+pago);
  98.        
  99.         ajax.onreadystatechange=function()
  100.         {
  101.             if (ajax.readyState==4)
  102.             {
  103.                 document.sumar1.reset();
  104.                 document.getElementById('TextBoxA').value = document.getElementById('ComboBox2').value;
  105.                 document.sumar1.disabled=false;
  106.                 boton.disabled=true; input.disabled=false;
  107.                 divMensaje.innerHTML=ajax.responseText;
  108.             }
  109.         }
  110.     }
  111. }
  #6 (permalink)  
Antiguo 11/08/2009, 22:01
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Como dato, acabo de ver que me manda el alert por que el nombre contiene espacio, como declaro eso en mi expresion? intente con +[\w] pero no me funciono, ¿o tal vez la sintasis estuvo mal, como seria entonces?
  #7 (permalink)  
Antiguo 11/08/2009, 22:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Expresiones regulares

mas bien esperaba un ejemplo en donde se produce el error. a continuacion el ejemplo que utilice el cual me funciona.
Código:
<script type="text/javascript">
function validaNombre(nombre){
var reg=/(^[a-zA-Z ÑñÁÉÍÓÚáéíóú]{15,45}$)/;
if(reg.test(nombre)) return true;
else return false;
}
</script>
<input value="mayúscula con ñame" type="text" onblur="if(!validaNombre(this.value))alert('dato incorrecto')" />
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 11/08/2009, 22:16
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Si es bien parecido, oye tengo una duda, parecera tonta pero al momento de escribir el codigo en el editor de mi cpanel y guardarlo, modifica los caracteres especiales, osea me pone la linea de la siguiente forma.

Código js:
Ver original
  1. var reg=/(^[a-zA-ZñÑ&# 225;&# 233;&# 237;&# 243;&# 250;&# 193;&# 201;&# 205;&# 211;&# 218; ]{15,45}$)/;

sin los espacios yo se los puse para que veas como lo guarda.

crees que eso tenga que ver por que no esta funcionando la sentencia? y disculpa pero si no me manda error por que no es problema de sintaxis, me manda el mismo alert, pero ya sabes lo que dice y por que sale.
  #9 (permalink)  
Antiguo 11/08/2009, 22:52
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Expresiones regulares

si, ahi es donde esta el problema. aunque javascript lo interpreta correctamente (es decir, no genera ningun error) realmente la expresion no significa nada de lo que inicialmente intentas. evidentemente es el servidor que te esta cambiando los caracteres por entidades HTML. lo mas seguro es que el servidor no admite subir codigo javascript y por eso no respeta los caracteres introducido. no te aseguro que pase el filtro, pero intenta utilizando el equivalente hexadecimal para aquellos caracteres reemplazado por la entidad. es decir, por ejemplo la á es E1 y en la expresion regular la escribes asi \xE1.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 11/08/2009, 22:57
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Bien gracias por el dato, voy a buscar una tabla hexadecimal y partire de tu referencia, otra cosa mas el problema con el if anidado, intente esto:

Código js:
Ver original
  1. function nuevoAjax()
  2. {
  3.     var xmlhttp=false;
  4.     try
  5.     {
  6.         xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  7.     }
  8.     catch(e)
  9.     {
  10.         try
  11.         {
  12.             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  13.         }
  14.         catch(E) { xmlhttp=false; }
  15.     }
  16.     if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); }
  17.  
  18.     return xmlhttp;
  19. }
  20.  
  21. function eliminaEspacios(cadena)
  22. {
  23.     var x=0, y=cadena.length-1;
  24.     while(cadena.charAt(x)==" ") x++;  
  25.     while(cadena.charAt(y)==" ") y--;  
  26.     return cadena.substr(x, y-x+1);
  27. }
  28.  
  29. function validaNombre(nombre)
  30. {
  31.     var reg=/(^[a-zA-Z]{15,45}$)/;
  32.     if(reg.test(nombre)) return true;
  33.     else return false;
  34. }
  35.  
  36. function validaMatricula(matricula)
  37. {
  38.     var reg=/(^[0-9a-zA-Z]{0,8}$)/;
  39.     if(reg.test(matricula)) return true;
  40.     else return false;
  41. }
  42.  
  43. function validaIngreso(valora)
  44. {
  45.     var reg=/(^[0-9]{10,18}$)/;
  46.     if(reg.test(valora)) return true;
  47.     else return false;
  48. }
  49.  
  50. function darValor(turno) {  
  51.     if (turno.checked==true){  
  52.         document.getElementById('turno').value=turno.value;
  53.     }
  54. }
  55.  
  56. function nuevoEvento(evento)
  57.        
  58. {
  59.     var divMensaje=document.getElementById("error");
  60.  
  61.     if(evento=="ingreso")
  62.     {
  63.         var matricula=document.getElementById("matricula").value;
  64.         var nombre=document.getElementById("nombre").value;
  65.         var colegio=document.getElementById("colegio").value;
  66.         var carrera=document.getElementById("TextBoxA").value;
  67.         var turno=document.getElementById("turno").value;
  68.         var concepto=document.getElementById("concepto").value;
  69.         var pago=document.getElementById("pago").value;
  70.         var input=document.getElementById("ingreso");
  71.         var boton=document.getElementById("botonIngreso");
  72.         var valora=input.value;
  73.         var textoAccion="Ingresando...";
  74.     }
  75.     else
  76.     {
  77.         var input=document.getElementById("verificacion");
  78.         var boton=document.getElementById("botonVerificacion");
  79.         var valora=input.value;
  80.         var textoAccion="Comprobando...";
  81.     }
  82.     if(!validaNombre(nombre)){
  83.         document.sumar1.nombre.style.backgroundColor="#FFD2DB";
  84.         alert("El nombre ingresado contiene caracteres o longitud invalida.");
  85.         boton.disabled=true; document.sumar1.okay1.checked = false;
  86.     }else {
  87.         document.sumar1.nombre.style.backgroundColor="#ffffff";
  88.        
  89.         if(!validaMatricula(matricula)){
  90.             document.sumar1.matricula.style.backgroundColor="#FFD2DB";
  91.             alert("La matricula ingresada contiene caracteres o longitud invalida.");
  92.             boton.disabled=true; document.sumar1.okay1.checked = false;
  93.         }else {
  94.             document.sumar1.matricula.style.backgroundColor="#ffffff";
  95.        
  96.             valora=eliminaEspacios(valora);
  97.             if(!validaIngreso(valora))
  98.             {
  99.                 document.sumar1.folio.style.backgroundColor="#FFD2DB";
  100.                 alert("El folio ingresado contiene caracteres o longitud invalida.");
  101.                 boton.disabled=true; document.sumar1.okay1.checked = false;
  102.             }else {
  103.                 document.sumar1.folio.style.backgroundColor="#ffffff";
  104.            
  105.                 if(document.sumar1.total1.value=='0'){
  106.                     document.sumar1.total1.style.backgroundColor="#FFD2DB";
  107.                     alert("La cantidad del deposito debe ser diferente a cero.");
  108.                     boton.disabled=true; document.sumar1.okay1.checked = false;
  109.                 }else {
  110.                     document.sumar1.total1.style.backgroundColor="#ffffff";
  111.                 }
  112.             }
  113.         }
  114.     }
  115.     else
  116.     {
  117.            
  118.         document.sumar1.disabled=true;
  119.         input.value=textoAccion;
  120.        
  121.         var ajax=nuevoAjax();
  122.         ajax.open("POST", "comprobar.php", true);
  123.         ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  124.         ajax.send(evento+"="+valora+"&matricula="+matricula+"&nombre="+nombre+"&colegio="+colegio+"&carrera="+carrera+"&nombre="+nombre+"&colegio="+colegio+"&carrera="+carrera+"&turno="+turno+"&concepto="+concepto+"&pago="+pago);
  125.        
  126.         ajax.onreadystatechange=function()
  127.         {
  128.             if (ajax.readyState==4)
  129.             {
  130.                 document.sumar1.reset();
  131.                 document.getElementById('TextBoxA').value = document.getElementById('ComboBox2').value;
  132.                 document.sumar1.disabled=false;
  133.                 boton.disabled=true; input.disabled=false;
  134.                 divMensaje.innerHTML=ajax.responseText;
  135.             }
  136.         }
  137.     }
  138. }

Pero lo empeore todo bueno almenos ya se que este si es un problema de sintaxis jaja.
  #11 (permalink)  
Antiguo 12/08/2009, 09:54
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Bueno ya quedo, ya verifica bien chevere gracias por la ayuda!
  #12 (permalink)  
Antiguo 13/08/2009, 11:41
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Hola tengo una ultima duda con expresiones regulares, se va a ingresar una cantidad en un campo pero tiene la cantidad de digitos pueden ser 2, ya sean 10 digitos o 18 digitos, entonces yo estaba haciendo esto .

Código js:
Ver original
  1. var reg=/(^[0-9]{10,18}$)/;

pero eso solo verifica que sea una cantidad de digitos de 10 a 18, y eso no es exactamente lo que quiero, quiero que si digitan 11 o 17 digitos tambien sea incorrecto. como le hago ahi?
  #13 (permalink)  
Antiguo 13/08/2009, 11:46
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Expresiones regulares

es un poco redundante pero intentalo asi:
Código:
var reg = /^\d{10}$|^\d{18}$/;
@edit: algo no andaba bien, ya esta arreglado
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 13/08/2009 a las 11:54
  #14 (permalink)  
Antiguo 13/08/2009, 11:50
Avatar de goyo_  
Fecha de Ingreso: agosto-2009
Mensajes: 91
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Expresiones regulares

Cita:
Iniciado por tampon Ver Mensaje
Hola tengo una ultima duda con expresiones regulares, se va a ingresar una cantidad en un campo pero tiene la cantidad de digitos pueden ser 2, ya sean 10 digitos o 18 digitos, entonces yo estaba haciendo esto .

Código js:
Ver original
  1. var reg=/(^[0-9]{10,18}$)/;

pero eso solo verifica que sea una cantidad de digitos de 10 a 18, y eso no es exactamente lo que quiero, quiero que si digitan 11 o 17 digitos tambien sea incorrecto. como le hago ahi?
Utiliza un alternador:

Código HTML:
var regex = /^(\d{10}|\d{18})$/;
(No e verificado el resultado)

Edit: El de zerokill sin parentesis me parece mejor, ya que no captura
Edit2: Correccion, es imposible quitar los parentesis, ya que ocuparias aniadir el dollar en medio, lo cual lo vuelve mas confuso

Última edición por goyo_; 13/08/2009 a las 12:23
  #15 (permalink)  
Antiguo 13/08/2009, 11:54
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Hola de nuevo zerokilled, gracias por la rapida respuesta pero no me funciono, me guarda una cantidad mayor a los 18 digitos y deja ingresar caracteres no numericos.

tambien intente con algo asi.
Código js:
Ver original
  1. var reg=/(^[0-9]{10}&&{18}$)/;
jaja pero me dio error no, se como hacerle jaja , saludos!
  #16 (permalink)  
Antiguo 13/08/2009, 11:55
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 7 meses
Puntos: 839
Respuesta: Expresiones regulares

Puede ser:
/^([0-9]{10}|[0-9]{18})$/
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #17 (permalink)  
Antiguo 13/08/2009, 11:59
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Expresiones regulares

Gracias a los dos, me funciono bien con la el ejemplo de goyo, suerte!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:39.