2015-12-05 9 views
13

Ich habe ein Registrierungsformular erstellt, in dem ein Landwirt seinen Namen eingeben wird. Der Name kann Bindestriche oder Leerzeichen enthalten. Die Validierungsregeln werden in der app/http/requests/farmerRequest.php Datei geschrieben:Laravel 5.1 Validierungsregel Alpha kann kein Leerzeichen annehmen

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

Aber das Problem ist das name Feld ist nicht erlaubt keine weißen Flächen wegen der alpha Regel. Das Feld name ist varchar(255) collation utf8_unicode_ci.

Was soll ich tun, damit der Benutzer seinen Namen mit Leerzeichen eingeben kann?

Antwort

23

Sie können eine Regular Expression Rule verwenden, die explizit nur Buchstaben, Bindestriche und Leerzeichen erlaubt:

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

Sie eine benutzerdefinierte Gültigkeitsregel für diese erstellen kann, da dies eine ziemlich allgemeine Regel ist, dass Sie vielleicht auf andere verwenden möchten Teil Ihrer App (oder vielleicht bei Ihrem nächsten Projekt).

auf app/Anbieter/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); 

    }); 

} 

Definieren Sie Ihre benutzerdefinierte Validierungsnachricht in Ressourcen/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.', 
.... 

und Verwendung es wie üblich

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

wo finden Sie diese 'AppServiceProvider.php' –

+0

Und vergessen Sie nicht,' Illuminate \ Support \ Facades \ Validator; 'zu verwenden oben in Ihrer' app/Providers/AppServiceProvider.php';) –

+0

Sie können auch Verwenden Sie $ this-> app in Service Providern und fügen Sie einen dritten Parameter als Fehlermeldung hinzu. Nützlich, wenn eine Übersetzung nicht benötigt wird. $ this-> app ['validator'] -> erweitern ('my_rule', function ($ attribute, $ value, $ parameter) {return (bool) preg_match (...);}, ': attribiere meine benutzerdefinierte Nachricht. "); –