regex pour un prénom

Par Cembal Bal Cin, il y a 7 ans


Bonjour,

J'utilise la regex suivante pour vérifier les champs d'un prénom :

if(preg_match('#^([A-Z]|[a-z])[a-z]*(-)?[a-z]+$#', $prenom))

Seulement, la ragex n'autorise pas accents, et j'aimerai uniquement autorisé les accents suivant : é è ê pour les prénoms comme : léa, Zoé etc.

Si vous pouvez m'aidez merci

9 réponses

Lartak, il y a 7 ans

Bonsoir.
Tu te compliques un peu trop les choses, la regex suivante est largement suffisante : ^[A-Z][A-Za-z\é\è\ê\-]+$.

Cembal Bal Cin, il y a 7 ans

Bonsoir,
Merci pour ta réponse, j'ai testé, mais ça ne m'insere pas dans la bdd

Enfaite, ma regex, doit seulement prendre les lettres de a à z et les 3 lettres suivante : é ê è
pas de caractère spéciaux, les tirets j'en veux que un est c'est celui la : -
pour les prénoms du style : marie-jésus

if(isset($_POST["nom"]) && isset($_POST["prenom"]) && isset($_POST["rumeur"]) && isset($_POST["idville"])) { if(!empty($_POST["nom"]) && !empty($_POST["prenom"]) && !empty($_POST["rumeur"]) && !empty($_POST["idville"])) { $nom = htmlspecialchars(strtolower($_POST['nom'])); $prenom = htmlspecialchars(strtolower($_POST['prenom'])); $rumeur = htmlspecialchars($_POST['rumeur']); $idville = $_POST['idville']; if(preg_match('#^[A-Z][A-Za-z\é\è\ê\-]+$', $nom)) { if(preg_match('#^[A-Z][A-Za-z\é\è\ê\-]+$', $prenom)) { $query = $pdo->prepare('INSERT INTO rumeur (nom, prenom, rumeur, id_ville) VALUES(:nom, :prenom, :rumeur, :idville)'); $query->bindParam(':nom', $nom); $query->bindParam(':prenom', $prenom); $query->bindParam(':rumeur', $rumeur); $query->bindParam(':idville', $idville); $query->execute(); } } ?> <?php } }
Huggy, il y a 7 ans

Tu vas te facher avec tous les Loïc et les Laëtitia !!!

Kareylo, il y a 7 ans

En PHP, tu peux utiliser ceci pour catcher tous les accents :

^[A-Z][\p{L}-]*$
Cembal Bal Cin, il y a 7 ans

J'ai essayé ton code, il ne fonctionne pas, sa ne m'insere pas dans la bdd, même sans accents

if(preg_match('^[A-Z][\p{L}-]*$', $nom)) { $query = $pdo->prepare('INSERT INTO rumeur (nom, prenom, rumeur, id_ville) VALUES(:nom, :prenom, :rumeur, :idville)'); $query->bindParam(':nom', $nom); $query->bindParam(':prenom', $prenom); $query->bindParam(':rumeur', $rumeur); $query->bindParam(':idville', $idville); $query->execute(); }
Kareylo, il y a 7 ans

Essaie avec les caratères spéciaux dans le preg_match

if(preg_match('#^[A-Z][\p{L}-]*$#', $nom)) { $query = $pdo->prepare('INSERT INTO rumeur (nom, prenom, rumeur, id_ville) VALUES(:nom, :prenom, :rumeur, :idville)'); $query->bindParam(':nom', $nom); $query->bindParam(':prenom', $prenom); $query->bindParam(':rumeur', $rumeur); $query->bindParam(':idville', $idville); $query->execute(); }
Cembal Bal Cin, il y a 7 ans

Toujours rien.

Carouge10, il y a 7 ans

Bonsoir,
"ça ne s'insère pas", est-ce tu sais si tu passes ou non dans le if ..... car tu n'as pour l'instant aucune certune que ce n'est pas ta requête qui plante...

Lartak, il y a 7 ans

J'ai essayé ton code, il ne fonctionne pas, sa ne m'insere pas dans la bdd, même sans accents

Pourtant la regex de Kareylo fonctionne bien, voir ici.
Si tu as un problème, ça ne vient pas de la regex, mais soit de la valeur que tu présentes à la regex, (peut-être un espace perdu ?), du coup ça ne passe pas la condition du preg_match ou alors c'est au niveau de ta requête SQL que le problème se situe.
En tout cas, un petit conseil, évites les répétitions dans tes code, par exemple si la même regex est utiliséé plusieurs fois dans ton, stockes la dans une variable et autre chose, tu devrais mieux apprendre les utilisations des foncttions, par exemple la fonction isset, tu devrais plutôt l'utilisr comme ceci :

if (isset($_POST["nom"], $_POST["prenom"], $_POST["rumeur"], $_POST["idville"])) { // etc ... }

Ensuite, en plus de vérifier si la variable existee bien avec isset, tu vérifies si elle n'est pas vide avec empty, sauf que tu peux très bien faire les deux vérifications avec seeulement empty :

empty — Détermine si une variable est vide
Détermine si une variable est considérée comme vide. Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à FALSE.

Donc autant faire directement :

if (!empty($_POST["nom"]) && !empty($_POST["prenom"]) && !empty($_POST["rumeur"]) && !empty($_POST["idville"])) { // etc .. }

Pour terminer, au lieu de faire deux conditions pour la regex, tu peux le faire avec une seule avec les deux vérifications qui se suivent puisque de toute manière il est néceessaire qu les deux variables soient controlées :

$regex = '/^[A-Z][\p{L}-]*$/'; if (preg_match($regex, $nom) && preg_match($regex, $prenom)) { // Requête SQL ... }