web-dev-qa-db-fra.com

Laravel 5.1 règle de validation alpha ne peut pas prendre d'espace blanc

J'ai créé un formulaire d'inscription où un agriculteur entrera son nom. Le nom peut contenir un trait d'union ou des espaces blancs. Les règles de validation sont écrites dans le fichier 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',
    ];
}

Mais le problème est que le champ name n'autorise aucun espace blanc en raison de la règle alpha. Le champ name est varchar(255) collation utf8_unicode_ci.

Que dois-je faire pour que l'utilisateur puisse entrer son nom avec des espaces blancs?

18
Noob Coder

Vous pouvez utiliser une règle d'expression régulière qui n'autorise explicitement que les lettres, les tirets et les espaces:

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

Vous pouvez créer une règle de validation personnalisée pour cela, car il s'agit d'une règle assez courante que vous souhaiterez peut-être utiliser sur une autre partie de votre application (ou peut-être sur votre prochain projet).

sur votre 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); 

    });

}

Définissez votre message de validation personnalisé dans 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.',
 ....

et l'utiliser comme d'habitude

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