I want to give a pattern for password. The password must be at least 8 characters long and should contain one uppercase letter, one lowercase letter and one number. I am new in yii1. Please help me.
            Asked
            
        
        
            Active
            
        
            Viewed 1,171 times
        
    1
            
            
        - 
                    1do you want to generate a random 8 character password ? what have you tried ? – Criesto Sep 22 '15 at 09:36
- 
                    No..I want user inputted password. – Mohibul Hasan Rana Sep 22 '15 at 09:40
3 Answers
1
            
            
        Try this way:
public function rules() {
return array(
    array('username, password', 'required'),
    array(
        'password',
        'match', 'pattern' => '/^[\*a-zA-Z0-9]{6,14}$/',
        'message' => 'Invalid characters in password.',
    ),
   array('password', 'length', 'min'=>8),
);
}
You can add any type of Pattern in above code.
 
    
    
        Community
        
- 1
- 1
 
    
    
        Insane Skull
        
- 9,220
- 9
- 44
- 63
- 
                    I give this rules in model but when I input any password and then click save button it inserted in the database. But the message 'Invalid characters in password.' shows in the form. I just want not save if password is not match like pattern. – Mohibul Hasan Rana Sep 22 '15 at 10:57
- 
                    
0
            
            
        It seems you can refer some PHP password validation code as follow,
<?php
$pwd = $_POST['pwd'];
if( strlen($pwd) < 8 ) {
    $error .= "Password too short! 
";
}
if( strlen($pwd) > 20 ) {
    $error .= "Password too long! 
";
}
if( strlen($pwd) < 8 ) {
    $error .= "Password too short! 
";
}
if( !preg_match("#[0-9]+#", $pwd) ) {
    $error .= "Password must include at least one number! 
";
}
if( !preg_match("#[a-z]+#", $pwd) ) {
    $error .= "Password must include at least one letter! 
";
}
if( !preg_match("#[A-Z]+#", $pwd) ) {
    $error .= "Password must include at least one CAPS! 
";
}
if( !preg_match("#\W+#", $pwd) ) {
    $error .= "Password must include at least one symbol! 
";
}
if($error){
    echo "Password validation failure(your choise is weak): $error";
} else {
    echo "Your password is strong.";
}
For more detail please refer this post
 
    
    
        Channa
        
- 4,963
- 14
- 65
- 97
0
            
            
        It can be done by Yii custom validation. Try below this one. i hope the custom validation may useful to your criteria
public function rules()
{
    return array(
        array('username, password', 'required'),
        array('password', 'length', 'min'=>8, 'max'=>16),
        // custom validation
        array('password', 'checkStrength', 'password'),
    );
}
public function checkStrength($attr)
{
    $policy1 = preg_match('/[A-Z]/', $this->$attr) ? 1 : 0 ;
    $policy2 = preg_match('/[a-z]/', $this->$attr) ? 1 : 0 ;
    $policy3 = preg_match('/[0-9]/', $this->$attr) ? 1 : 0 ;
    $policy4 = preg_match('/[\'\/~`\!@#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:\<\>,\.\?]/', $this->$attr) ? 1 : 0 ;
    if(!$policy1)
        $this->addError('password', $this->getAttributeLabel($attr) . ' must contains atleast one upper case character.');
    if(!$policy2)
        $this->addError('password', $this->getAttributeLabel($attr) . ' must contains atleast one lower case character.');
    if(!$policy3)
        $this->addError('password', $this->getAttributeLabel($attr) . ' must contains atleast one number.');
    if(!$policy4)
        $this->addError('password', $this->getAttributeLabel($attr) . ' must contains atleast one special character (/~`!@#$%^&*()_-+={}[]|;:<>,.?)');
}
 
    
    
        Gopi Ramasamy
        
- 17
- 5
