Skip to content

Instantly share code, notes, and snippets.

@Michael-Brooks
Last active February 16, 2024 09:29
Show Gist options
  • Star 60 You must be signed in to star a gist
  • Fork 18 You must be signed in to fork a gist
  • Save Michael-Brooks/fbbba105cd816ef5c016 to your computer and use it in GitHub Desktop.
Save Michael-Brooks/fbbba105cd816ef5c016 to your computer and use it in GitHub Desktop.
Laravel Password validation Regex (Contain at least one uppercase/lowercase letters and one number)
<?php
/*
* Place this with the rest of your rules.
* Doesn't need to be in an array as there are no pipes.
* Password is required with a minimum of 6 characters
* Should have at least 1 lowercase AND 1 uppercase AND 1 number
*/
$rules = [
'password' => 'required|min:6|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$/'
];
/*
* Use this one if you also require at least one symbol.
* Needs to be in an array as it contains a pipe symbol.
* Password is required with a minimum of 6 characters
* Should have at least 1 lowercase AND 1 uppercase AND 1 number AND 1 symbol
*/
$rules = [
'password' => [
'required',
'min:6',
'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/'
]
];
@wdmtech
Copy link

wdmtech commented Jul 24, 2015

Saved me some time, thanks!

@wdmtech
Copy link

wdmtech commented Jul 28, 2015

^(?=.*[a-z|A-Z])(?=.*[A-Z])(?=.*\d).+$
added extra OR A-Z as wasn't matching numeric passwords w/out lowercase chars

@HashmatWaziri
Copy link

thanks. it worked

@eddnav
Copy link

eddnav commented Mar 29, 2016

Thanks, saved some time with this. Tested it with RegExr.com and it's what I needed.

@llevvi
Copy link

llevvi commented Jun 26, 2016

Thanks! I changed mine to accept lowercase or uppercase letters:
/^(?=.*[a-zA-Z])(?=.*\d).+$/

Copy link

ghost commented Jul 26, 2016

Thanks!

@hariharan2684
Copy link

Thank you very much

@sushantaryal
Copy link

Thank You

@rosshristov
Copy link

Thank you

@findelallc
Copy link

Thanks.

@anmolio
Copy link

anmolio commented May 16, 2017

Great ! Easy and crisp 🍡

@ankurk91
Copy link

ankurk91 commented Aug 25, 2017

Adding some more goodies -

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Register custom validators
        Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) {
            return \Illuminate\Support\Facades\Hash::check($value, auth()->user()->password);
        }, "The :attribute field does not match with your current password.");

        Validator::extend('strong_password', function ($attribute, $value, $parameters, $validator) {
            // Contain at least one uppercase/lowercase letters, one number and one special char
            return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/', (string)$value);
        }, 'Please make a strong password');

    }
}

@dneey
Copy link

dneey commented Mar 2, 2018

Thanks

@rafaelfn
Copy link

How to apply this validation to ResetPassword also?

@Michael-Brooks
Copy link
Author

How to apply this validation to ResetPassword also?

@rafaelfn

You can override the rules trait by doing something like

    protected function rules()
    {
        return [
            'token' => 'required',
            'email' => 'required|email',
            'password' => [
                'required',
                'min:6',
                'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/'
            ],
        ];
    }

And placing that inside /app/Http/Controllers/Auth/ResetPasswordController.php

@rafaelfn
Copy link

rafaelfn commented Jul 1, 2019

How to apply this validation to ResetPassword also?

@rafaelfn

You can override the rules trait by doing something like

    protected function rules()
    {
        return [
            'token' => 'required',
            'email' => 'required|email',
            'password' => [
                'required',
                'min:6',
                'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/'
            ],
        ];
    }

And placing that inside /app/Http/Controllers/Auth/ResetPasswordController.php

Awesome! Worked perfectly here, thank you very much Michael!

@Muniraj132
Copy link

very usefull one..

@sahdevpalaniya
Copy link

only capital latter with a integer and not allowed special characters because i am used for promo codes.

@kas5986
Copy link

kas5986 commented Jan 28, 2024

what about adding custom error messages on laravel 9 and 10 about new rule?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment