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 :

Regex pour chiffres uniquement [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut Regex pour chiffres uniquement
    Bonjour a tous.

    J'ai un petit soucis avec une discipline dans la quelle je suis très loin d'exceller Les regex:

    Le pire c'est que ce que je cherche doit etre tout simple mais bon

    Je voudrais verifier si une string que je recupere est compose que de chiffres.

    J'ai essaye comme sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (preg_match("#[0-9]# ", $Entite_a_suprimmer))
    {
    echo 'VRAI';
    }
    else
    {
    echo 'FAUX';
    }
    Mais le soucis c'est que du moment qu'il y a un chiffre dans la chaine il est content

    Pourriez vous me dire comment faire pour vérifier que la chaine est exclusivement constitué de chiffres

    Merci d'avance
    Spécialiste des questions bêtes

    ”If you can't explain it simply, you don't understand it” (Ce que tu ne peux pas expliquer simplement, tu ne le comprends pas) Albert Einstein

    Si une reponse vous plait ou vous a aidé n'hesitez pas a voter pour

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je ne suis pas une experte des regex, mais le plus est peut-être d'inverser la condition : si on trouve autre chose qu'un chiffre alors le test est faux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (preg_match("#[^0-9]+# ", $Entite_a_suprimmer))
    {
    echo 'FAUX';
    }
    else
    {
    echo 'VRAI';
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut
    Marche pas non plus avec cette regex sa me mets faux si je mets que des chiffres et accepte le mélange de chiffres lettres.

    Je crois que c'est le preg_match qui n'est pas adapté car il semble accepter la chaine du moment qu'il trouve au moins une fais ce qu'il cherche.

    Mais je suis pas sur de moi
    Spécialiste des questions bêtes

    ”If you can't explain it simply, you don't understand it” (Ce que tu ne peux pas expliquer simplement, tu ne le comprends pas) Albert Einstein

    Si une reponse vous plait ou vous a aidé n'hesitez pas a voter pour

  4. #4
    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
    Bonjour,

    Le quantificateur + n'est pas vraiment utile, puisque tu ne cherches pas à capturer la chaîne en cause. Bien qu'il soit aussi inoffensif pour le résultat de recherche, il influera (un tout petit peu) sur les perfs.
    • 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

  5. #5
    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 EIN-LESER Voir le message
    Marche pas non plus avec cette regex sa me mets faux si je mets que des chiffres et accepte le mélange de chiffres lettres.

    Je crois que c'est le preg_match qui n'est pas adapté car il semble accepter la chaine du moment qu'il trouve au moins une fais ce qu'il cherche.

    Mais je suis pas sur de moi
    Attention, Celira a inversé le vrai et le faux pour prendre en compte sa nouvelle expression. En as-tu bien tenu compte ?
    • 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

  6. #6
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut
    Oui j'ai bien vu l'inversion .

    Le probleme c'est que dans cette solution la regex renvoi
    -faux pour 12 la c'est bon
    - vrai pour p la c'est bon aussi
    - vrai pour 12p la c'est plus bon

    Sorry je sais que c'est bizarre mais je suis vraiment un débutant en regex
    Spécialiste des questions bêtes

    ”If you can't explain it simply, you don't understand it” (Ce que tu ne peux pas expliquer simplement, tu ne le comprends pas) Albert Einstein

    Si une reponse vous plait ou vous a aidé n'hesitez pas a voter pour

  7. #7
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut
    Au fait je demande a un admin de saisir le numéro identificateur d'une entité affin de l'effacer.
    Les id sont constitué de 1 a 6 chiffres et uniquement de chiffres.

    Le but recherche est de vérifier si la saisie correspond bien a sa.

    Voila c'est toujours plus simple dans son contexte
    Spécialiste des questions bêtes

    ”If you can't explain it simply, you don't understand it” (Ce que tu ne peux pas expliquer simplement, tu ne le comprends pas) Albert Einstein

    Si une reponse vous plait ou vous a aidé n'hesitez pas a voter pour

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    D'après tes tests tu obtiens vrai dès que la chaine contient autre chose que des chiffres. En dehors du fait qu'il va falloir inverser vrai et faux dans la condition, ce n'est pas ce que tu voulais ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    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
    Chez moi, les tets sont concluants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $myPattern = '#[^0-9]#';
     
    $myReplace = 'index.php?page=tag&t=$2&p=$1';
     
    // test
    $myString = "12";
    if (preg_match($myPattern, $myString, $matches)) { echo "KO"; } else {print "OK";}
     
    $myString = "p";
    if (preg_match($myPattern, $myString, $matches)) { echo "KO"; } else {print "OK";}
     
    $myString = "12p";
    if (preg_match($myPattern, $myString, $matches)) { echo "KO"; } else {print "OK";}
    OKKOKO
    • 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

  10. #10
    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
    Et pour vérifier plus précisément ta saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    // pattern
    $myPattern = '#^[0-9]{6}$#';
     
    // test
    $myString = "12345";
    print preg_match($myPattern, $myString, $matches) ."\n";
    $myString = "123456";
    print preg_match($myPattern, $myString, $matches) ."\n";
    $myString = "1234567";
    print preg_match($myPattern, $myString, $matches) ."\n";
    $myString = "p";
    print preg_match($myPattern, $myString, $matches) ."\n";
    $myString = "12345p";
    print preg_match($myPattern, $myString, $matches) ."\n";
    $myString = "123456p";
    print preg_match($myPattern, $myString, $matches) ."\n";
    • 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

  11. #11
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut
    j'étais tellement dans mon erreur que je l'ai même pas vu en la rédigeant

    Tu a raison ta solution marche impeccablement Merci mille fois

    Et encore sorry je suis un peux lent a la détente ce matin
    Spécialiste des questions bêtes

    ”If you can't explain it simply, you don't understand it” (Ce que tu ne peux pas expliquer simplement, tu ne le comprends pas) Albert Einstein

    Si une reponse vous plait ou vous a aidé n'hesitez pas a voter pour

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2014
    Messages : 108
    Points : 30
    Points
    30
    Par défaut
    Bonjour à tous,

    je me permets de poster un commentaire sur ce sujet déjà résolu, car le problème de EIN-LESER et le mien sont du même genre.
    Et donc pour éviter de créer un nouveau sujet qui se porte sur celui ci je préfère poster un nouveau commentaire.

    Je suis aussi une débutante en regex, et j'aimerais avoir un pattern qui permette a l'utilisateur d'insérer un ou plusieurs numéros dans un textarea :
    - Si cela est un NIP (numéro d'identifiant) alors les numéros seront composé de 12 chiffres
    - Si c'est un NDA (numéro de dossier) alors les numéros seront composé de 9 chiffres.

    Voici mes regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 
    echo " Le(s) NIP que vous voulez rejouer est : ";
    echo "<center><textarea id='NIP_MSG' name='NIP_MSG' rows='3' cols = '50'>";
    echo $NIP_MSG;
    echo "</textarea></center>";
    $pattern = '/^(\d{12}\\s*)*$/';
    $result = preg_match($pattern, $NIP_MSG);
    $listNumPatient = preg_split('/[\s]+/', $NIP_MSG);
    ?>
    Et pour le NDA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    echo " Le(s) NDA que vous voulez rejouer est : ";
    echo "<center><textarea id='NDA_MSG' name='NDA_MSG' rows='3' cols = '50'>";
    echo $NDA_MSG;
    echo "</textarea></center>";
    $pattern = '/^(\d{9}\\s*)*$/';
    $result = preg_match($pattern, $NDA_MSG);
    $listNumDossiers1 = preg_split('/[\s]+/', $NDA_MSG);
    ?>
    Le problème est que lorsque l'utilisateur insère dans le champs les numéros inférieur ou supérieurs a 9 pour le NDA cela marche bien, cela affiche bien l'erreur de saisie. Mais lorsque l'utilisateur saisie autant des chiffres et des lettres ( tout en étant égale à 9 ) cela fonctionne aussi.
    Alors qu'il ne devrais pas marcher, car je lui demande uniquement les chiffres et rien d'autres ..
    Et j'ai donc le même problème pour le NIP aussi et je ne sais plus quoi faire après mainte recherches..

    Merci d'avance pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. regex pour ne garder que les chiffres et les ;
    Par webol dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2015, 15h48
  2. [RegEx] regex pour des chiffres limités
    Par kOrt3x dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2010, 16h53
  3. [RegEx] Regex pour récupérer une chaîne de 6 chiffres
    Par calitom dans le forum Langage
    Réponses: 5
    Dernier message: 12/06/2008, 21h37
  4. regex pour comparer des dates, des chiffres, des nombres
    Par lex13 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/07/2007, 11h51
  5. Controle de saisie pour chiffres uniquement
    Par sab_etudianteBTS dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/04/2007, 08h21

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