Правило проверки достоверности Laravel 5.1 не может принимать пробелы

Я создал регистрационную форму, в которой фермер будет вводить свое имя. Имя может содержать дефис или пробелы. Правила проверки написаны в файле 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.

Что мне делать, чтобы пользователь мог ввести свое имя в пробелы?

Ответ 1

Вы можете использовать правило регулярного выражения, которое явно допускает буквы, дефисы и пробелы:

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

Ответ 2

Вы можете создать собственное правило проверки для этого, поскольку это довольно распространенное правило, которое вы можете использовать в другой части вашего приложения (или, возможно, в следующем проекте).

в приложении/поставщиках/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',
    ];
}