web-dev-qa-db-ja.com

Laravel 5.1検証ルールalphaは空白を使用できません

農家が自分の名前を入力する登録フォームを作成しました。名前にはハイフンまたは空白を含めることができます。検証ルールは_app/http/requests/farmerRequest.php_ファイルに記述されています。

_public function rules()
{
    return [
        'name'     => 'required|alpha',
        'email'    => 'email|unique:users,email',
        'password' => 'required',
        'phone'    => 'required|numeric',
        'address'  => 'required|min:5',
    ];
}
_

しかし、問題はnameフィールドがalpha規則のために空白を許可しないことです。 nameフィールドはvarchar(255) collation utf8_unicode_ciです。

ユーザーが空白で名前を入力できるようにするにはどうすればよいですか?

18
Noob Coder

正規表現ルール を使用して、文字、ハイフン、スペースのみを明示的に使用できます。

public function rules()
{
    return [
        'name'     => 'required|regex:/^[\pL\s\-]+$/u',
        'email'    => 'email|unique:users,email',
        'password' => 'required',
        'phone'    => 'required|numeric',
        'address'  => 'required|min:5',
    ];
}
36
Bogdan

これはカスタム検証ルールを作成できます。これは、これがアプリの他の部分(または次のプロジェクト)で使用する可能性がある非常に一般的なルールであるためです。

app/Providers/AppServiceProvider.php

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    //Add this custom validation rule.
    Validator::extend('alpha_spaces', function ($attribute, $value) {

        // This will only accept alpha and spaces. 
        // If you want to accept hyphens use: /^[\pL\s-]+$/u.
        return preg_match('/^[\pL\s]+$/u', $value); 

    });

}

resources/lang /en/ validation.phpでカスタム検証メッセージを定義します

return [

/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to Tweak each of these messages here.
|
*/
// Custom Validation message.
'alpha_spaces'         => 'The :attribute may only contain letters and spaces.',

'accepted'             => 'The :attribute must be accepted.',
 ....

そしていつものようにそれを使用します

public function rules()
{
    return [
        'name'     => 'required|alpha_spaces',
        'email'    => 'email|unique:users,email',
        'password' => 'required',
        'phone'    => 'required|numeric',
        'address'  => 'required|min:5',
    ];
}
30
Chris Landeza