Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Expresión regular

Estas en el tema de Expresión regular en el foro de Javascript en Foros del Web. Hola me he quedado un poco atrancado con una expresión regular a ver si alguien puede echarme un cable... Bueno lo que quiero verificar con ...
  #1 (permalink)  
Antiguo 08/10/2014, 10:16
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Expresión regular

Hola me he quedado un poco atrancado con una expresión regular a ver si alguien puede echarme un cable...

Bueno lo que quiero verificar con la expresión regular es una contraseña que contenga un minimo de 6 caracteres letras o numeros y tambien que dentro de ese minimo de 6, 2 caracteres de esos 6 sean numeros...

Por ejemplo..
(Contraseñas que serían validas..)
56asds
l5l2ñlk
2lklk2

(No validas)
asdsdsaaaaa
as2aaa
23
2323


Este es mi código ahora mismo, a ver si alguien me puede echar un cable
Muchisimas gracias!

Código:
function validarPass(password){ //funcion validarNif
	var er_pass = /^([a-zA-Z0-9]{6,})$/;

	if(!er_pass.test(password)) { 
		return 1;
	}
}

function pregunta()
{ 
    if (confirm('¿Estas seguro de enviar este formulario?'))
	{
		//Valido el pass
		if(validarPass(document.fvalida.password.value)==1)
		{ //si la funcion validarEmail devuelve 1 es que hay un error
			alert("Debe introducir un password válido con un minimo de 6 carácteres y 2 dígitos.");

			document.fvalida.password.focus(); //hacemos focus al elemento
			return false; 
		}
    }
}
  #2 (permalink)  
Antiguo 08/10/2014, 14:37
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 9 meses
Puntos: 1012
Respuesta: Expresión regular

creo que no es posible hacerlo con una sola expresión. en javascript no existe lookbehind, sólo tenemos lookahead. entonces, puedes hacer que la cadena esté compuesta por 6 ó más caracteres, también puedes hacer que la cadena tenga tanto dígitos como letras. pero, no puedes controlar el número de dígitos que habrá en la cadena

Cita:
/^(?=[a-z]*\d)(?=(\d)*[a-z])[a-z0-9]{6,}$/i
ahora para saber el número de dígitos que tiene la cadena

Cita:
valor.match(/\d/g).length
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 09/10/2014, 06:38
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Expresión regular

Podrias decirme como implementar esto en mi código??? Muchisimas gracias Isabel!
  #4 (permalink)  
Antiguo 09/10/2014, 09:24
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Expresión regular

Si existe una expresión regular para expresar un lenguaje de cadenas de más de 6 caracteres:
Código Javascript:
Ver original
  1. /^.{6,}$/
Y una expresión regular para expresar un lenguaje de cadenas alfanumérica con mínimo 2 dígitos:
Código Javascript:
Ver original
  1. /^\w*\d\w*\d\w*$/

La teoría dice que existe un lenguaje intersección de ellos que se puede expresar con una expresión regular:
Código Javascript:
Ver original
  1. /^\w*\d\w*\d\w{4,}|\w*\d\w+\d\w{3,}|\w*\d\w{2,}\d\w{2,}|\w*\d\w{3,}\d\w+|\w*\d\w{4,}\d\w*|\w+\d\w*\d\w{3,}|\w+\d\w+\d\w{2,}|\w+\d\w{2,}\d\w+|\w+\d\w{3,}\d\w*|\w{2,}\d\w*\d\w{2,}|\w{2,}\d\w+\d\w+|\w{2,}\d\w{2,}\d\w*|\w{3,}\d\w*\d\w+|\w{3,}\d\w+\d\w*|\w{4,}\d\w*\d\w*$/
La teoría no dice que sea sencillo de expresar

Lo que hace el aburrimiento... Pero que conste que no lo he escrito a dedo: http://jsfiddle.net/674gdv1d/

delarosan1, comprobar que una cadena tenga 6 caracteres o más es tan sencillo como comprobar que su propiedad `length` sea mayor o igual que 6. ¿Estás seguro que te han dicho que lo implementes solamente usando expresiones regulares? Porque es como matar moscas con un bazoca.

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 09/10/2014 a las 09:38
  #5 (permalink)  
Antiguo 09/10/2014, 10:15
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Expresión regular

¿Se puede hacer de otra forma mas sencilla sin utilizar expresiones regulares?
Se que la longitud minima de 6 si puedo verla con un .length, ¿pero que tenga un minimo de dos digitos como se podria mirar?
  #6 (permalink)  
Antiguo 09/10/2014, 10:25
Avatar de carscx  
Fecha de Ingreso: noviembre-2008
Mensajes: 227
Antigüedad: 15 años, 5 meses
Puntos: 10
Respuesta: Expresión regular

Cita:
Iniciado por delarosan1 Ver Mensaje
¿Se puede hacer de otra forma mas sencilla sin utilizar expresiones regulares?
Se que la longitud minima de 6 si puedo verla con un .length, ¿pero que tenga un minimo de dos digitos como se podria mirar?
Una forma medio bruta, se me ocurre, hacer un split y comprobar caracter por caracter si es un string o un numero, si al menos dos son numeros, ok, si no, false!
__________________
Frontend Developer
JS+HTML5+CSS3
Backend Developer
PHP+MySQL
  #7 (permalink)  
Antiguo 09/10/2014, 10:50
 
Fecha de Ingreso: junio-2013
Mensajes: 28
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Expresión regular

Muchisimas gracias todos ¡me funciono! :)
  #8 (permalink)  
Antiguo 09/10/2014, 13:11
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 9 meses
Puntos: 1012
Respuesta: Expresión regular

por dios!! que cosas más abominables se pueden llegar a crear
Cita:
function validarPass(password){ //funcion validarNif
var er_pass = /^(?=[a-z]*\d)(?=(\d)*[a-z])[a-z0-9]{6,}$/i;

if(!er_pass.test(password)) {
return 1;
} else if(password.match(/\d/g).length != 2) {
return 1;
} else {
return 0;
}

}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: formulario, funcion, regular
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 03:15.