IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Autoriser uniquement certains caractères


Sujet :

Langage PHP

  1. #1
    HwRZxLc4
    Invité(e)
    Par défaut Autoriser uniquement certains caractères
    Bonjour,

    Je voudrais savoir comment je peux autoriser que les caractères alphanumérique "a-z, A-Z, 0-9 et les espaces"

    Voila ma tentative....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!ereg('[^0-9a-zA-Z] ', $_POST['message'])) $erreur = "C'est pas bon..."
    Merci.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Il faut placer l'espace dans la classe et supprimer la négation PHP car déjà présente dans le motif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Si $_POST['message'] contient un caractère autre que alphanumérique ou espace alors ...
    if (ereg('[^0-9a-zA-Z ]', $_POST['message'])) $erreur = "Ce n'est pas bon ...";
    Sinon ça revient à demander tout caractère qui n'est pas alphanumérique suivi d'un espace.

    Par contre, il faudrait penser à plutôt utiliser les fonctions PCRE (preg_*) plutôt que les POSIX (ereg*), ces dernières étant dépréciées.

  3. #3
    HwRZxLc4
    Invité(e)
    Par défaut
    Par contre, il faudrait penser à plutôt utiliser les fonctions PCRE (preg_*) plutôt que les POSIX (ereg*), ces dernières étant dépréciées.
    Une lien de ce truc ?

    Merci.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La documentation dit :
    Note: preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Parce que j'aime réduire la taille des regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(preg_match('#^[\w ]*$#',$_POST['message'])){
    	$erreur='Ce n\'est pas bon ...'
    }
    Pour ce qui est de PCRE contre POSIX : http://lumadis.be/regex/tuto_pcre.php (c'est en même un temps un très bon tuto sur les regexp)
    est votre ami. Utilisez le avant de venir poser une question traitée 50 fois.
    Exprimez vous dans un français correct, vous serrez mieux compris.

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par k1rby Voir le message
    Parce que j'aime réduire la taille des regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(preg_match('#^[\w ]*$#',$_POST['message'])){
    	$erreur='Ce n\'est pas bon ...'
    }
    Bonjour,

    L'exemple est incorrect, très légèrement, à cause de la présence d'espaces et l'emplacement des crochets.
    Tu pouvais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!preg_match('#^(\w)*$#',$_POST['message'])){
    	$erreur='Ce n\'est pas bon ...'
    }
    ou alors tu voulais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(preg_match('#[^\w]#',$_POST['message'])){
    	$erreur='Ce n\'est pas bon ...'
    }
    ce qui est une alternative intéressante.

    Je citerais enfin la doc officielle :
    Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné, c'est-à-dire un caractère qui pourra être une partie d'un mot Perl. La définition des lettres et chiffres est définie par les tables de caractères de PCRE, et peut varier suivant la table locale de caractères. Par exemple, dans la configuration "français" ("fr"), certains caractères ont des codes supérieurs à 128, pour les caractères accentués, et ils seront compris par le métacaractère \w.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  7. #7
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Oui je m'ai trompé j'ai mis un espace au lieu de \s :s

    Par contre :
    Citation Envoyé par cobra-expert Voir le message
    Je voudrais savoir comment je peux autoriser que les caractères alphanumérique "a-z, A-Z, 0-9 et les espaces"
    Je vois pas en quoi ^[\w\s]*$ ne correspond pas à ça oO
    est votre ami. Utilisez le avant de venir poser une question traitée 50 fois.
    Exprimez vous dans un français correct, vous serrez mieux compris.

  8. #8
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par k1rby Voir le message
    Je vois pas en quoi ^[\w\s]*$ ne correspond pas à ça oO
    Autant pour moi, j'avais raté l'espace dans l'expression de besoin. Et ça change tout.

    Cette expression est alors valide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/^[\w\s]*$/';
    ou on peut aussi tester la négative
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/[^\w\s]/';
    Je ne sais pas ce qui serait le plus performant.

    Encore une fois, toutes mes excuses pour le ratage.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  9. #9
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Y'a pas de mal
    est votre ami. Utilisez le avant de venir poser une question traitée 50 fois.
    Exprimez vous dans un français correct, vous serrez mieux compris.

  10. #10
    HwRZxLc4
    Invité(e)
    Par défaut
    re, finalement, un pot ma aidé....

    Les regex c'est mortelle comme truc

    Merci à vous.

    *cobra-expert est parti allumer un cierge pour les regex mortelle.

  11. #11
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Citation Envoyé par k1rby Voir le message
    Je vois pas en quoi ^[\w\s]*$ ne correspond pas à ça oO
    Il ne correspond pas car \w inclus les caractères accentués ainsi que l'underscore, et le \s signifie tous les caractères blancs, pas uniquement les espaces.

  12. #12
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Tiens je découvre que PHP se démarque, normalement \w équivaut juste à [a-zA-Z0-9], par contre le underscore ok mais pas les caractères accentués.
    est votre ami. Utilisez le avant de venir poser une question traitée 50 fois.
    Exprimez vous dans un français correct, vous serrez mieux compris.

  13. #13
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Apparemment ça dépend de la config du serveur :

    http://fr.php.net/manual/en/regexp.reference.php :

    A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. For example, in the "fr" (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.
    Donc à moins de savoir comment contrôler précisément tout ça plutôt à éviter.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. [RegEx] Uniquement certains caractères
    Par Chimique dans le forum Langage
    Réponses: 5
    Dernier message: 12/03/2010, 13h03
  2. SVNServe : Autoriser uniquement certaines IP
    Par Stoomm dans le forum Linux
    Réponses: 4
    Dernier message: 20/01/2010, 18h12
  3. N'autoriser que certains caractéres
    Par guigui69 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 06/11/2009, 08h44
  4. [RegEx] Autoriser seulement certains caractères dans une chaine
    Par ptitdav80 dans le forum Langage
    Réponses: 2
    Dernier message: 03/06/2008, 20h54
  5. [RegEx] Regex : autoriser seulement certains caractères
    Par Thi0123 dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2006, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo