2016-04-21 11 views
24

Ich möchte Benutzereingabe Telefonnummer überprüfen, wo Nummer genau 11 sein sollte und begann mit 01 und Wert Feld sollte nur Nummer sein. Wie mache ich das mit der Laravel-Validierung?Wie validiere Telefonnummer in Laravel 5.2?

Hier ist mein Controller:

public function saveUser(Request $request){ 
     $this->validate($request,[ 
      'name' => 'required|max:120', 
      'email' => 'required|email|unique:users', 
      'phone' => 'required|min:11|numeric', 
      'course_id'=>'required' 
      ]); 

     $user = new User(); 
     $user->name= $request->Input(['name']); 
     $user->email= $request->Input(['email']); 
     $user->phone= $request->Input(['phone']); 
     $user->date = date('Y-m-d'); 
     $user->completed_status = '0'; 
     $user->course_id=$request->Input(['course_id']); 
     $user->save(); 
     return redirect('success'); 

    } 
+0

Ich hoffe, dass dies Ihrem [php - Benutzerdefinierte Validieren Telefonnummern in Laravel 4.2 - Stack Overflow] helfen wird (http://stackoverflow.com/questions/29259366/custom-validate-phone-number-in- -laravel-4-2? answertab = votes # tab-top) It say's 4.2 aber diese Methode ist auch in 5.2 verfügbar – Devsome

+0

Was ist das Problem, das Sie mit diesem Code bekommen? – Abhishek

Antwort

35

Eine mögliche Lösung wäre Regex zu verwenden.

'phone' => 'required|regex:/(01)[0-9]{9}/' 

Dies wird die Eingabe überprüfen beginnt mit 01 und wird von 9 Zahlen gefolgt. Bei Verwendung von Regex benötigen Sie die Validierungsregeln numeric oder size nicht.

Wenn Sie diese Validierungsmethode an anderer Stelle wiederverwenden möchten, sollten Sie eine eigene Validierungsregel zum Validieren von Telefonnummern erstellen.

Docs: Custom Validation

In Ihrem AppServiceProvider ‚s boot Methode:

Validator::extend('phone_number', function($attribute, $value, $parameters) 
{ 
    return substr($value, 0, 2) == '01'; 
}); 

Dies ermöglicht Ihnen, die phone_number Gültigkeitsregel überall in Ihrer Anwendung zu verwenden, so dass Ihre Formularvalidierung sein könnte:

'phone' => 'required|numeric|phone_number|size:11' 

In Ihrer Validiererweiterung können Sie auch überprüfen, ob $value numeriert ist ric und 11 Zeichen lang.

+0

Ihre Regex ist nicht perfekt. Es passt nicht von Anfang an und es wird nicht auf Länge geprüft, daher gilt das auch: 'ht01123456789123456789'. Dies ist die korrekte Regex (als Validierungsregel): Regex:/^ (\ + 36) [0-9] {9} $/''. – totymedli

+0

Wenn Sie einen Telefonnummernprüfer schreiben, sollte er alle Anforderungen bestätigen, die eine Telefonnummer erfüllen muss. Es sollte auch nach Längen- und Zahlenwerten suchen. In Ihrer aktuellen Lösung müssen Sie überall, wo Sie sie verwenden, weitere Regeln hinzufügen. Obwohl es funktioniert, ist es keine gut organisierte Lösung. Der Validator ist nicht vollständig, nach der Validierung passiert - trotz seines Namens - nicht, ob etwas wirklich eine Telefonnummer ist, sondern nur, dass es mit "01" beginnt. – totymedli

+0

Dies ist nicht mehr gültig. In den Niederlanden wurden M2M-Nummern eingeführt, die 12 Ziffern lang sind. – FrozenDroid

8

Verwenden required|numeric|size:11 Statt required|min:11|numeric

+0

Ich möchte nur eine numerische Eingabe machen, aber nur mit 11 Ziffern! nicht weniger oder mehr als das tatsächlich – User57

+1

In Ihrer Frage, die Sie für mindestens 11 Zahlen fragen, wenn Sie genau 11 Zahlen möchten Sie 'erforderlich | numerische | Größe: 11'. Überlege, deine Frage zu aktualisieren, wenn sie falsch formuliert ist. – SlateEntropy

+0

Ja @SlateEntropy ist korrekt. Bitte aktualisieren Sie Ihre Frage, ich werde die Antwort aktualisieren. – Abhishek

9
Validator::extend('phone', function($attribute, $value, $parameters, $validator) { 
     return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$%i', $value) && strlen($value) >= 10; 
    }); 

Validator::replacer('phone', function($message, $attribute, $rule, $parameters) { 
     return str_replace(':attribute',$attribute, ':attribute is invalid phone number'); 
    }); 

Nutzungs

Fügen Sie diesen Code in das AppServiceProfider mit Ihrer Anwendung gestartet werden.

diese Regel bestätigt die Telefonnummer gegenüber dem vorgegebenen Muster oben, dass ich nach
langer Suche fand sie die am häufigsten verwendeten mobilen oder Telefonnummern in vielen Ländern Spiele
Dies ermöglicht Ihnen, die phone Gültigkeitsregel zu verwenden, An jedem beliebigen Ort in Ihrer Anwendung könnte Ihre Formularüberprüfung folgendermaßen aussehen:

+2

Danke! Für alle, die Probleme damit haben, sollten Sie 'Illuminate \ Support \ Facades \ Validator' am Anfang von' AppServiceProvider' hinzufügen. – fronzee

+1

Dies sollte die besser akzeptierte Antwort sein, da sie gründlicher ist als die gewählte. Dann verstehe ich wieder, dass die Zeit, in der diese Antwort gegeben wurde, den Unterschied macht. –

+0

Wenn die Telefonnummer nicht verpflichtend ist, wirft diese Lösung weiterhin die Fehlermeldung "Telefon ist ungültige Telefonnummer" –

0

Es gibt eine Menge Dinge zu beachten, wenn Sie eine Telefonnummer überprüfen, wenn Sie wirklich darüber nachdenken. (besonders international), also ist die Verwendung eines Pakets bei weitem besser als die akzeptierte Antwort, und wenn Sie etwas Einfaches wie eine Regex wollen, würde ich vorschlagen, etwas Besseres zu verwenden als das, was @SlateEntropy vorgeschlagen hat. (etwas wie A comprehensive regex for phone number validation)