[php] Vérifier l'absence de chiffres

Salut,

J'ai trop du mal avec les expressions régulières, ça fait quelques temps que je lutte avec ça...
Mon but est de vérifier l'absence de chiffres et de caractères spéciaux dans une chaîne :
j'ai ma variable $prenom et dedans je veux vérifier qu'il n'y a bien que des caractères entre a et z ou entre A et Z.
Et vu qu'il existe des prénoms compliqués (ou des noms, c'est le même problème) il faut autoriser les tirets (-) et les apostrophes (').

Quelqu'un peut m'aider ?

1 réponse

  1. Salut,

    pour t'aider : https://www.commentcamarche.net/contents/803-php-expressions-regulieres

    Par exemple, pour n'avoir que les caractères entre a-z et A-Z avec apostrophe et tiret :

    preg_match("#^[a-zA-Z'-]$#",  $prenom)
    2
    1. Justement, c'est ce que j'avais fais, et c'est ce qui ne marche pas ^^
      Voilà ma syntaxe :

      if(!preg_match("#^[a-zA-Z'-]$#",  $prenom)){
      	echo "le prénom n'est pas valide";
      }
      else echo "ok";


      Avec ça, si je tapes "georges" (par exemple) ce n'est pas valide, par contre si je mets juste un tiret c'est ok, et si je mets un tiret avec des lettres le prenom n'est pas valide...
      J'ai plus de cheveux tellement que je me les arrache ^^
      0
    2. En effet, un problème de quantificateur je pense. Essaye ceci:

      preg_match("#^[a-zA-Z'-]+$#",  $prenom)

      $prenom doit contenir au moins un caractère.

      preg_match("#^[a-zA-Z'-]{1,20}$#",  $prenom)

      $prenom doit être compris entre 1 et 20 cractères.
      0
    3. Génial ton code marche bien, merci !

      C'est quand j'y retouche que rien ne va plus... J'ai voulu ajouter les accents et les oe æ(j'y ai pas pensé plus tôt) et donc je fais ça :
      preg_match(#^[a-zA-Z'-àâäéèêëîïôöûüÀÄÂÉÈÊÎÏÔÖÛÜoeæ]+$#", $prenom)

      et ça ne fonctionne plus du tout !

      Je continue à chercher.
      0
    4. Attention au tiret "-", il sert à définir un intervalle, exemple "a-z". Si tu le veux dans la liste des caractères possibles, met le à la fin de ton expression, soit :

      preg_match("#^[a-zA-Z'àâäéèêëîïôöûüÀÄÂÉÈÊÎÏÔÖÛÜoeæ-]+$#", $prenom)


      Sa devrait mieux marcher !
      0
    5. Ok, nickel ça fonctionne !
      Un grand merci à toi Noux pour tes explications :)
      0