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


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

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
            }       
        }   

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

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

^[A-Z][\p{L}-]*$

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();          
                }

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();          
                }

Toujours rien.

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...

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 ...
}