Foros del Web » Programando para Internet » Javascript »

Comprobar textbox con expresiones regulares

Estas en el tema de Comprobar textbox con expresiones regulares en el foro de Javascript en Foros del Web. Hola! Tengo un textbox en el que tengo que el usuario tiene que introducir su nombre, y debo comprobar que el nombre introducido tiene una ...
  #1 (permalink)  
Antiguo 11/09/2011, 04:32
 
Fecha de Ingreso: septiembre-2011
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Pregunta Comprobar textbox con expresiones regulares

Hola!
Tengo un textbox en el que tengo que el usuario tiene que introducir su nombre, y debo comprobar que el nombre introducido tiene una longitud mayor de 5 caracteres y que no contiene números. Este es el código que he escrito:

var nombre=document.getElementById("nombre").value;

if(!/[A-Za-z]/.test(nombre)|| nombre.length<5 ){
alert("El campo \"nombre\" debe tener al menos 4 caracteres y no debe contener números");
}

El problema viene cuando mezclo números con letras, que lo acepta como válido. Creo que el problema lo tengo en la expresión regular, pero es que aún no me manejo muy bien en ese tema.. alguna idea?? Gracias!
  #2 (permalink)  
Antiguo 11/09/2011, 08:09
Avatar de Raziel_Ravenheart  
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 7 meses
Puntos: 37
Respuesta: Comprobar textbox con expresiones regulares

Revisemos rápidamente la lógica

Primero la expresión regular:
tienes esto
/[A-Za-z]/.test(nombre)
lo cual va a devolver true si el nombre contiene solo letras, siempre, cuando le antepones el signo !, le estas solicitando al interprete que no deje ejecutar las instrucciones del if, a menos que el valor se falso

escribir
!/[A-Za-z]/.test(nombre)

es lo mismo que escribir

/[A-Za-z]/.test(nombre) == false

lo cual nunca va a suceder si escribes solo letras, por que siempre que se escriban solo letras, va a ser true el valor devuelto, por eso cuando ingresas números, va a retornar false, por que no se cumple la expresión y por lo tanto tu condición va a ser verdadera y va a permitir la ejecución del código. Es decir para que se evalue verdadero el valor retornado por la función test, quítale el signo de admiración.

Ahora diices que el nombre tenga una longitud mayor a 5 letras. Con:

nombre.length < 5

se evalua true cuando el nombre tiene menos de 5 letras, por lo tanto permite la ejecución del if, es decir, cuando el nombre tiene entre 0 y 4 letras, el código se va a ejecutar. Necesitas usar esto, de la siguiente manera

nombre.length > 5; que se lee, cuando la longitud de nombre sea mayor que 5, acuerdate bien de estos detalles de matemáticas para que puedas armar bien tus expresiones booleanas.

Ahora y por ultimo, dices que ambas se tienen que cumplir, es decir, el nombre solo debe contener letras y su longitud ser mayor a 5 caracteres, entonces para eso tienes que utilizar el otro operador lógico es decir:

if (/[A-Za-z]/.test(nombre) && nombre.length > 5) {
//código a ejecutarse
}

Acuerdate muy bien de las tablas de verdad, dicen que, cuando se utiliza el operador logico OR (||), si una de las dos expresiones evalua verdadero, toda la expresión será verdadera. En cambio tu necesitas que se cumplan las dos, por eso debes unirlas con el otro operador, el AND (&&), ya que si alguna de las dos no se cumple, entonces no se ejecutan las instrucciones dentro del if.

Te recomiendo que repases conceptos de lógica y algo de matemática, por que no eres el único al que le pasa, muchas personas tienen este lio, y se dejan traumatizar, sin saber que pueden hacer pruebas, como esta, que espero la hagas algún día, por ejemmplo, con los valores ya cargados en las variables, has esto:

alert(nombre.length > 5 );
alert(/[A-Za-z]/.test(nombre) );
alert( /[A-Za-z]/.test(nombre) && nombre.length > 5 );

Y probando con distintas variaciones, como por ejemplo la que tenías
alert(! /[A-Za-z]/.test(nombre) || nombre.length < 5 );

ultima recomendación, utiliza en lo posible expresiones regulares dentro de variables, para que no te confundas, es decir, puedes hacer algo como

var exp = /[A-Za-z]/g
exp.test(nombre)

de este modo podrás modificar la expresión regular o reutilizarla, sin complicarte la vida, ya que es muy seguro que más adelante tengas que utilizar una o varias y estarlas cambiando cuando se compilan o prueban, puede ser muy cansado.

no es un método óptimo de depuración, pero al menos te ayudara a salir del paso, y entender cuando una expresión evalua el valor que necesitas, y comprender que retornan las funciones y por que.

Ok, exitos
  #3 (permalink)  
Antiguo 11/09/2011, 14:47
 
Fecha de Ingreso: septiembre-2011
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Comprobar textbox con expresiones regulares

Hola! Perdona, creo que no me he explicado bien antes.Quiero que el if se ejecute cuando la información introducida sea errónea, ya que el mensaje de alerta es para indicar que los datos están mal introducidos. Lo que quiero es algo como esto: si el nombre contiene números y la longitud es menor de 5, que se abra un alert indicando que no es válido ese nombre.
Es por eso que añado el signo ! delante de la expresión y para chekear la longitud pongo nombre.length < 5.
Cuando hago las comprobaciones sólo me falla cuando intercalo números y letras, algo como "as23". Si introduzco algo así no entra en el if mostrando el mensaje de error. Si incluyo sólo números si lo muestra, y si introduzco, por ejemplo, sólo 3 caracteres también.

Se te ocurre porque puede ser?? Muchas gracias!
  #4 (permalink)  
Antiguo 11/09/2011, 16:32
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Comprobar textbox con expresiones regulares

Cita:
Iniciado por Raziel_Ravenheart
por eso cuando ingresas números, va a retornar false, por que no se cumple la expresión y por lo tanto tu condición va a ser verdadera y va a permitir la ejecución del código.
Meeeec, error!
Cita:
Iniciado por InmaBravo
Cuando hago las comprobaciones sólo me falla cuando intercalo números y letras, algo como "as23". Si introduzco algo así no entra en el if mostrando el mensaje de error. Si incluyo sólo números si lo muestra, y si introduzco, por ejemplo, sólo 3 caracteres también.

Se te ocurre porque puede ser?? Muchas gracias!
Prueba de agudeza visual, tenéis 10 segundos para ver las dos diferencias:
Código Javascript:
Ver original
  1. /[A-Za-z]/.test(str);
  2. /^[A-z]+$/.test(str);
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: expresiones, regulares, textbox
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 06:33.