web-dev-qa-db-fra.com

Laravel 5.4 - Validation avec Regex

Voici ma règle pour le nom du projet:

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

J'essaie d'ajouter la règle telle qu'elle doit commencer par une lettre de a-z ou A-z et peut se terminer par des chiffres mais pas du tout.

Valeurs valides pour le nom du projet:

myproject123
myproject
MyProject

Valeurs non valides pour le nom du projet:

123myproject
!myproject
myproject 123
my project
my project123

J'ai essayé mon regex en ligne:

enter image description here

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

Cela devrait fonctionner, mais je peux réussir la validation même avec project 123.

[~ # ~] update [~ # ~]: Cela fonctionne, je viens de le tester dans le mauvais contrôleur, je suis désolé ... mais peut-être que cela aidera les autres

26
Black

Votre règle est bien faite [~ # ~] mais [~ # ~] vous devez savoir, spécifier des règles de validation avec des regex séparées par un pipeline peut conduire à un comportement indésirable.

La manière appropriée de définir une règle de validation devrait être:

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

Vous pouvez lire sur le document officiel :

regex: motif

Le champ en cours de validation doit correspondre à l'expression régulière donnée.

Remarque: Lorsque vous utilisez les modèles regex/not_regex, il peut être nécessaire de spécifier des règles dans un tableau au lieu d'utiliser des délimiteurs de canal , en particulier si l'expression régulière contient un personnage de pipe.

53
Troyer