CodeIgniter Strong Password Validation
When You are going to create a Registration Form then You should make sure that users always must have a strong password. It's quite easy to create a Strong password Validation with CodeIgniter, by using the Form Validation Library and REGEX.
For example, Set the minimum and maximum length of the password, It should contain a lowercase, uppercase, numbers, and special chars. You can also easily make sure that the data entered in the password field Should be equal to password confirmation field.
An example password policy could be:
- Required
- Lowercase
- Uppercase
- Number
- Special Chars
PasswordValidation.php(view)
<!DOCTYPE html>
<html>
<head>
<title>Strong Password Validation</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div class="container-fluid ">
<div class="row">
<div class="col-md-9 offset-md-1">
<div class="user_about_content_box">
<div class="tab-pane">
<h3>Strong Password Validation</h3>
</div>
<div class="col-md-8">
<?php
if($this->session->flashdata('success'))
{
echo "<span class='text-success' style='font-weight:bold'>".$this->session->flashdata('success')."</span>";
}
?>
</div>
<form method="post" action="<?php echo base_url('passwordcontroller/index'); ?>">
<div class="col-md-8">
<div class="form-group" id="prime_cat">
<input type="email" value="<?php echo set_value('email'); ?>" name="email" class="form-control input-group-lg" placeholder="Email">
</div>
<?php if(form_error('email')){echo "<span style='color:red'>".form_error('email')."</span>";} ?>
<div class="form-group" id="prime_cat">
<input type="text" value="<?php echo set_value('new_password'); ?>" name="new_password" class="form-control input-group-lg" placeholder="New Password">
</div>
<?php if(form_error('new_password')){echo "<span style='color:red'>".form_error('new_password')."</span>";} ?>
<div class="form-group" id="prime_cat">
<input type="password" value="<?php echo set_value('confirm_password'); ?>" name="confirm_password" class="form-control input-group-lg" placeholder="Confirm Password">
</div>
<?php if(form_error('confirm_password')){echo "<span style='color:red'>".form_error('confirm_password')."</span>";} ?>
<div class="form-group col-md-12">
<input class="btn btn-primary" type="submit" value="Create account">
</div>
</div>
</form>
</div> <!--Content box ends-->
</div>
</div>
</div>
</div>
</body>
</html>
PasswordController.php(Controller)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class PasswordController extends CI_Controller
{
public function index()
{
$rules = array(
[
'field' => 'email',
'label' => 'Email',
'rules' => 'required',
],
[
'field' => 'new_password',
'label' => 'New Password',
'rules' => 'callback_valid_password',
],
[
'field' => 'confirm_password',
'label' => 'Confirm Password',
'rules' => 'matches[new_password]',
],
);
$this->form_validation->set_rules($rules);
if($this->form_validation->run()==FALSE)
{
$this->load->view('PasswordValidation');
}
else
{
$this->session->set_flashdata('success','Congrates ');
redirect(base_url('PasswordController/index'));
}
}
//Create strong password
public function valid_password($password = '')
{
$password = trim($password);
$regex_lowercase = '/[a-z]/';
$regex_uppercase = '/[A-Z]/';
$regex_number = '/[0-9]/';
$regex_special = '/[!@#$%^&*()\-_=+{};:,<.>??~]/';
if (empty($password))
{
$this->form_validation->set_message('valid_password', 'The {field} field is required.');
return FALSE;
}
if (preg_match_all($regex_lowercase, $password) < 1)
{
$this->form_validation->set_message('valid_password', 'The {field} field must be at least one lowercase letter.');
return FALSE;
}
if (preg_match_all($regex_uppercase, $password) < 1)
{
$this->form_validation->set_message('valid_password', 'The {field} field must be at least one uppercase letter.');
return FALSE;
}
if (preg_match_all($regex_number, $password) < 1)
{
$this->form_validation->set_message('valid_password', 'The {field} field must have at least one number.');
return FALSE;
}
if (preg_match_all($regex_special, $password) < 1)
{
$this->form_validation->set_message('valid_password', 'The {field} field must have at least one special character.' . ' ' . htmlentities('!@#$%^&*()\-_=+{};:,<.>??~'));
return FALSE;
}
if (strlen($password) < 5)
{
$this->form_validation->set_message('valid_password', 'The {field} field must be at least 5 characters in length.');
return FALSE;
}
if (strlen($password) > 32)
{
$this->form_validation->set_message('valid_password', 'The {field} field cannot exceed 32 characters in length.');
return FALSE;
}
return TRUE;
}
//strong password end
}
Output(validation error)
Output(validation success message)
