Regla que identifique ciertos caracteres

Hola a todos!

Este es mi primer post en el foro. Bueno, sin mas que decir empiezo

Quiero que mi password del modelo incluya ciertos caracteres, ¿saben que regla debo aplicar?

trate con


array('CLAVE', 'required' ,'requiredValue' => 'hola'),

Pero solo permite que la clave sea "hola" y no que sea algo como "123hola"

concretamente quiero que el password tenga ciertos caracteres especiales.

Trate con pattern, pero no entendi muy bien este pattern que vi de ejemplo




public function caracteresEspeciales($attribute,$params)

	{

 

        $pattern = '/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/';  


 

    if(!preg_match($pattern, $this->$attribute))

      $this->addError($attribute, 'Tu password no es lo suficientemente complejo');

	  

	} 



Muchas gracias de antemano!

hola, en primer lugar te recomiendo que busques una pagina de "regexp tester", buscalo asi en google y saldran como 50 testers de expresiones regulares que te ayudaran.

De resto, la implementacion de tu funcion creada en Yii se aplica asi:

array(‘CLAVE’,‘caracteresEspeciales’) // sin el ‘on’, para que aplique en cualquier escenario donde toque modificarse la clave.

si tu metodo caracteresEspeciales no es llamado, quiza sea porque no has especificado una regla "safe" o "required" previamente para tu atributo.

por ultimo,

primero crea un caso de pruebas, como mejor gustes hacerlo, que evalue las diferentes combinaciones de claves que tus usuarios puedan ingresar, esto ultimo es para que te asegures que tu expresion regular esta bien hecha.

cuando dices: "[color=#1C2837][size=2]Trate con pattern, pero no entendi muy bien este pattern que vi de ejemplo[/size][/color] ", nadie dijo que las expresiones regulares sean faciles de digerir, por eso, te recomiendo arriba de primero que busques una herramienta de validacion de expresiones regulares, son gratuitas.

Vaya, muchas gracias por tu pronta respuesta

Enseguida busco lo que me dijiste

Con respecto al metodo, si lo implemente (se me olvidó aclararlo).


array('CLAVE', 'caracteresEspeciales'),

El problema es que no se lo que validaba con


$pattern = '/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/';  

Y casi que todos los pattern que he conseguido siguen esa formula que aun no comprendo bien.

Haré pruebas como me dijiste y expondré mis resultados

Gracias!

Listo, solucionado, con este pattern que consegui aca, funciona perfectamente webintenta.com/validacion-con-expresiones-regulares-y-javascript.html (no tiene hipervínculo porque aun no puedo postearlos)




	public function caracteresEspeciales($attribute,$params)

	{

	

	  $pattern ='/(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$/';

	 

    if(!preg_match($pattern, $this->$attribute))

      $this->addError($attribute, 

	  'Debe estar entre 8 y 10 caracteres, por lo menos un digito y un alfanumerico, sin caracteres especiales');

	  

	}




Recuerden colocar en rules()


array('CLAVE', 'caracteresEspeciales'),



Y recuerden que todos los pattern que consigan tienen que ponerle "/" al inicio y al final

Saludos!