Bha*_*mar 27 php validation laravel laravel-5
如何在验证器中添加密码验证规则?
验证规则:
密码包含以下五个类别中至少三个的字符:
如何在验证器规则中添加上述规则?
我的代码在这里
// create the validation rules ------------------------
$rules = array(
'name' => 'required', // just a normal required validation
'email' => 'required|email|unique:ducks', // required and must be unique in the ducks table
'password' => 'required',
'password_confirm' => 'required|same:password' // required and has to match the password field
);
// do the validation ----------------------------------
// validate against the inputs from our form
$validator = Validator::make(Input::all(), $rules);
// check if the validator failed -----------------------
if ($validator->fails()) {
// get the error messages from the validator
$messages = $validator->messages();
// redirect our user back to the form with the errors from the validator
return Redirect::to('home')
->withErrors($validator);
}
Run Code Online (Sandbox Code Playgroud)
may*_*ʎɐɯ 92
我在Laravel中有类似的场景,并通过以下方式解决了它.
密码包含以下五个类别中至少三个的字符:
首先,我们需要创建一个正则表达式并对其进行验证.
你的正则表达式如下所示:
^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$
Run Code Online (Sandbox Code Playgroud)
我已在本网站上测试并验证过它.然而,以自己的方式执行自己的工作并相应地进行调整.这只是正则表达式的一个例子,你可以按照你想要的方式进行操作.
所以你的最终Laravel代码应该是这样的:
'password' => 'required|
min:6|
regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|
confirmed',
Run Code Online (Sandbox Code Playgroud)
更新 为@NikK在评论中提到,在Laravel 5.6中,密码值应该封装在数组方括号中
'password' => ['required',
'min:6',
'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/',
'confirmed']
Run Code Online (Sandbox Code Playgroud)
我没有在Laravel 5.6上测试它,所以我相信@NikK因此我已经转移到使用c#/ .net这些天并且没有太多时间用于Laravel.
注意:
一些在线参考
关于Laravel中正则表达式规则的自定义验证消息,以下是一些要查看的链接:
hin*_*e02 13
自定义 Laravel 验证规则将允许开发人员为每个用例提供自定义消息,以获得更好的 UX 体验。
php artisan make:rule IsValidPassword
namespace App\Rules;
use Illuminate\Support\Str;
use Illuminate\Contracts\Validation\Rule;
class isValidPassword implements Rule
{
/**
* Determine if the Length Validation Rule passes.
*
* @var boolean
*/
public $lengthPasses = true;
/**
* Determine if the Uppercase Validation Rule passes.
*
* @var boolean
*/
public $uppercasePasses = true;
/**
* Determine if the Numeric Validation Rule passes.
*
* @var boolean
*/
public $numericPasses = true;
/**
* Determine if the Special Character Validation Rule passes.
*
* @var boolean
*/
public $specialCharacterPasses = true;
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$this->lengthPasses = (Str::length($value) >= 10);
$this->uppercasePasses = (Str::lower($value) !== $value);
$this->numericPasses = ((bool) preg_match('/[0-9]/', $value));
$this->specialCharacterPasses = ((bool) preg_match('/[^A-Za-z0-9]/', $value));
return ($this->lengthPasses && $this->uppercasePasses && $this->numericPasses && $this->specialCharacterPasses);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
switch (true) {
case ! $this->uppercasePasses
&& $this->numericPasses
&& $this->specialCharacterPasses:
return 'The :attribute must be at least 10 characters and contain at least one uppercase character.';
case ! $this->numericPasses
&& $this->uppercasePasses
&& $this->specialCharacterPasses:
return 'The :attribute must be at least 10 characters and contain at least one number.';
case ! $this->specialCharacterPasses
&& $this->uppercasePasses
&& $this->numericPasses:
return 'The :attribute must be at least 10 characters and contain at least one special character.';
case ! $this->uppercasePasses
&& ! $this->numericPasses
&& $this->specialCharacterPasses:
return 'The :attribute must be at least 10 characters and contain at least one uppercase character and one number.';
case ! $this->uppercasePasses
&& ! $this->specialCharacterPasses
&& $this->numericPasses:
return 'The :attribute must be at least 10 characters and contain at least one uppercase character and one special character.';
case ! $this->uppercasePasses
&& ! $this->numericPasses
&& ! $this->specialCharacterPasses:
return 'The :attribute must be at least 10 characters and contain at least one uppercase character, one number, and one special character.';
default:
return 'The :attribute must be at least 10 characters.';
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的请求验证中:
$request->validate([
'email' => 'required|string|email:filter',
'password' => [
'required',
'confirmed',
'string',
new isValidPassword(),
],
]);
Run Code Online (Sandbox Code Playgroud)
Jam*_*mes 10
尽管希望有所帮助,但这并不完全符合OP的要求。使用Laravel,您可以以易于维护的格式定义规则,如下所示:
$inputs = [
'email' => 'foo',
'password' => 'bar',
];
$rules = [
'email' => 'required|email',
'password' => [
'required',
'string',
'min:10', // must be at least 10 characters in length
'regex:/[a-z]/', // must contain at least one lowercase letter
'regex:/[A-Z]/', // must contain at least one uppercase letter
'regex:/[0-9]/', // must contain at least one digit
'regex:/[@$!%*#?&]/', // must contain a special character
],
];
$validation = \Validator::make( $inputs, $rules );
if ( $validation->fails() ) {
print_r( $validation->errors()->all() );
}
Run Code Online (Sandbox Code Playgroud)
将输出:
[
'The email must be a valid email address.',
'The password must be at least 10 characters.',
'The password format is invalid.',
]
Run Code Online (Sandbox Code Playgroud)
(默认情况下,正则表达式规则共享一条错误消息,即,四个失败的正则表达式规则会导致一条错误消息)
现在您可以使用 Laravel 密码验证
// Require at least 8 characters...
Password::min(8)
// Require at least one letter...
Password::min(8)->letters()
// Require at least one uppercase and one lowercase letter...
Password::min(8)->mixedCase()
// Require at least one number...
Password::min(8)->numbers()
// Require at least one symbol...
Password::min(8)->symbols()
Run Code Online (Sandbox Code Playgroud)
或者你可以把它们全部链接起来
use Illuminate\Validation\Rules\Password;
'password' => [
'required',
'string',
Password::min( 8 )->mixedCase()->numbers()->symbols()->uncompromised(),
'confirmed'
],
Run Code Online (Sandbox Code Playgroud)
来源@https://laravel.com/docs/8.x/validation#validating-passwords
听起来对于正则表达式来说是一项不错的工作。
Laravel 验证规则支持正则表达式。4.X 和 5.X 版本都支持它:
这也可能有帮助:
http://www.regular-expressions.info/unicode.html