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 :

Vérifier que les caractères entrés ne sont composés que de chiffres [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut Vérifier que les caractères entrés ne sont composés que de chiffres
    Bonjour

    Je voulais faire une fonction qui faisait en sorte de vérifié qu'une expression ne contienne que des chiffres mais ça ne marche pas....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function num_Ok($num){
        preg_match("/([0-9^a-z^A-Z])/",$num,$result);
        if(!empty($result)){
            return false;
        }
        return true;
    }
    Si quelqu'un peut m'aiguiller...

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben en même temps, dans ton expression, tu autorises les lettres, donc pour vérifier qu'il n'y a que des chiffres, c'est moyen moins !
    D'autre part, que viennent donc faire tous ces ^ dans ta regex ?

    Bref, je pense que l'utilisation de is_numeric() ou is_int() sera plus simple à mettre en oeuvre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    sur ce que je lis si j ai un truc 37ea ça retournerais true or dans mon cas ça doit retourné false...

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut

    Soit tu lis mal, soit tes sources sont fausses...
    Mais une chose est sure : tu n'as pas testé.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Non je testerais demain aujourd hui je vais me reposer un peu.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse ça marche en effet. Faudrait qu'il corrige leur truc sur la doc de php... Ou alors c'est moi qui ne comprend pas trop quant je lis l'exemple.
    http://php.net/manual/fr/function.is-numeric.php

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Effectivement, je pense que tu ne comprends pas qu'un chiffre peut être écrit en différents formats (par exemple dans différentes bases).

    Mais si cela te semble trop permissif, il y a aussi is_int().

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    et aussi return ctype_digit((string)$num); qui lui gère tous les cas de figure, même des numériques de 200 digits s'il le faut.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Bon je reviens vers vous...
    J'ai créer une fonction, en tout cas je pensais, qui doit me retourné si une valeur entrée respecte bien le format du type heure c'est a 15:00 ou 72:00 ou 0:30
    Le truc c'est que ça foire encore une fois...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function verif_Heure($heure){
        preg_match("/([0-9][^a-z][^A-Z]{1,2}:[0-9][^a-z][^A-Z]{2})/",$heure,$result);
        if(!empty($result)){
            return false;
        }
        return true;
    }
    Quelqu'un peut il me dire ce qui ne vas pas au juste?? -_-'

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Je pense que l'essentiel du problème est que tu écris des choses sans comprendre ce qu'elles signifient...
    Essaye de nous expliquer à quoi servent chacune des parties de la regex et tu devrais te rendre compte de certaines erreurs.

    Au préalable, n'hésite pas à consulter :
    Expressions régulières.
    Enfin maîtriser les Expressions Rationnelles (JavaScript mais largement valide pour PHP).

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Bon alors
    [0-9][^a-z][^A-Z]{1,2} pour dire que j'accepte que la première partie soit composé de 1 à 2 chiffres entre 0 et 9 les [^a-z] pour exclure les lettre de l'alphabet.
    le : pour dire qu'entre les deux ça doit être séparé par 2points
    [0-9][^a-z][^A-Z]{2} pour dire que j'accepte que la dexuième partie soit composé de 2 chiffres entre 0 et 9 les [^a-z] pour exclure les lettre de l'alphabet.

    Voila ce que je pensais que ça faisais...

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    c'est pas ça du tout

    [0-9] 1 caractère compris entre le 0 et le 9, suivi de
    [^a-z] 1 caractère qui soit en dehors de la plage allant de a à z, suivi de
    [^A-Z]{1,2} 1 ou 2 caractères en dehors de la plage allant de A à Z, suivi de
    : le caractère :, suivi de
    [0-9] 1 caractère compris entre le 0 et le 9, suivi de
    [^a-z] 1 caractère qui soit en dehors de la plage allant de a à z, suivi de
    [^A-Z]{2} 2 caractères en dehors de la plage allant de A à Z.

    On est donc très loin du format souhaité.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    j ai modifié après avoir été lire des tutos sur les expressions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function verif_Heure($date){
        preg_match("/([0-9^a-zA-Z]{1,2}:[0-9^a-zA-Z]{2})/",$date,$result);
        if(!empty($result)){
            return false;
        }
        return true;
    }
    Ca colle mieux mais la deuxième partie accepte les lettre...

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    [0-9^a-zA-Z] n'a aucun sens !
    Dans une classe, tu mets soit ce que tu veux, soit ce que tu veux pas, mais tu mélanges pas les deux !
    C'est une question de logique. A titre d'exemple, si je mets le caractère ~, ta classe l'accepte ou pas, vu qu'il n'est ni dans les caractères acceptés ni dans les caractères refusés ?
    Est-ce qu'il faut le refuser parce qu'il n'apparait pas dans les caractères acceptés ou est-ce qu'il faut l'accepter parce qu'il n'est pas dans les caractères refusés. Tu vois bien que c'est un non sens.
    [0-9^a-zA-Z] signifie juste que tu veux un chiffre entre 0 et 9 ou le caractère ^, ou une lettre entre a et z, ou une lettre entre A et Z

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Donc si je t'ai bien compris

    ([0-9]{1,2}:[0-9]{2}) ça ça suffit ?

  16. #16
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu peux même économiser quelques caractères avec les classes prédéfinies :
    Mais ça reste incomplet parce qu'avec "salut, j'ai bossé dur pendant 72:00 heures et quelque", ça matchera aussi.
    Il faut donc préciser que tu veux que la recherche commence au début de la chaine et fini à la fin :

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    ok merci pour ton aide la je comprend mieux comment ça marche.... Il m'aura fallu le temps...

  18. #18
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Bovino Voir le message
    n'hésite pas à consulter :
    Expressions régulières.
    Enfin maîtriser les Expressions Rationnelles (JavaScript mais largement valide pour PHP).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/05/2014, 15h30
  2. Lire un fichier : Lire les caractères entre [ et ]
    Par yetimothee dans le forum C++
    Réponses: 5
    Dernier message: 22/08/2007, 22h40
  3. Réponses: 3
    Dernier message: 15/06/2007, 14h53
  4. Réponses: 2
    Dernier message: 21/02/2007, 12h54
  5. JavaScript/Zone de texte : n'accepter que les caractères numériques
    Par arkienou dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/07/2006, 14h16

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