2017-03-03 15 views
9

Poniżej jest moja zasada nazwa projektu:laravel 5.4 - Walidacja z Regex

$this->validate(request(), [ 
    'projectName' => 'required|regex:/(^([a-zA-z]+)(\d+)?$)/u', 
]; 

Próbuję dodać regułę, takie, że musi zacząć z list od a-z lub A-z i może kończyć się liczby, ale większość nie.

Prawidłowe wartości Nazwa projektu:

myproject123 
myproject 
MyProject 

Nieprawidłowe wartości dla nazwy projektu:

123myproject 
!myproject 
myproject 123 
my project 
my project123 

Próbowałem mój regex online:

enter image description here

https://regex101.com/r/FylFY1/2

To powinno działać, ale mogę przejść walidację nawet z project 123.

UPDATE: To faktycznie działa, właśnie testowałem go w niewłaściwym sterowniku, im przykro ... ale może to pomoże innym mimo

Odpowiedz

18

Reguła jest dobrze zrobione ALE trzeba wiedzieć, określ reguły sprawdzania poprawności za pomocą wyrażenia rozdzielanego potokami może prowadzić do niepożądanych zachowań.

Właściwym sposobem definiowania reguły walidacji powinny być:

$this->validate(request(), [ 
    'projectName' => 
     array(
      'required', 
      'regex:/(^([a-zA-Z]+)(\d+)?$)/u' 
     ) 
]; 

można przeczytać na oficjalnych dokumentów:

regex: wzór

Pole pod walidacji musi odpowiadać pod warunkiem regularnego wyrażania.

Uwaga: Podczas korzystania ze wzorca regex może być konieczne określenie reguł w tablicy zamiast używania ograniczników przewodów, szczególnie jeśli wyrażenie regularne zawiera znak potoku.

https://laravel.com/docs/5.4/validation#rule-regex

+0

ups. mój wariant też działa, po prostu przetestowałem go na niewłaściwym kontrolerze:/ – Black

+2

@EdwardBlack Nadal dobra praktyka używania tablicy do sprawdzania poprawności wyrażenia regularnego, na razie jest okey, ale w przypadku, gdy musisz dodać potoki wewnątrz wzorca regex na przyszłość. :) – Troyer

Powiązane problemy