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 :

un float et rien d'autre [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Par défaut un float et rien d'autre
    Avant de convertir une chaine en float via un cast (float), je veux être certain que le format de la chaine soit correcte.

    Je n'accepte que :
    - une chaine qui contient "entier(s).entier(s)" (test avec un preg_match)
    - ou une chaine composée de caractères de 0 à 9 (j'utilise le ctype_digit qui fait ça simplement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function str_is_a_float ($arg_str)
    {
    $pattern ='`([0-9]{0,}+[.]+[0-9]{0,})`'; // float only
    if(!(preg_match($pattern, $arg_str)|ctype_digit($arg_str))) return (FALSE); // float only or integer only
    return (TRUE);
    }
    preg_match va trouver "4.5", mais aussi "nimportequoi4.5" ou "4.5nimportequoi"

    Je n'arrive pas a placer une assertion avant et arrière pour n'autoriser que mon motif et seulement lui seul !

  2. #2
    Membre expérimenté

    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
    Par défaut
    Si j'ai bien compris, ce n'est pas une assertion qu'il faut chercher à placer ici mais purement et simplement les ancres de début (^)/fin de chaîne ($) (avec l'option D) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern ='`^(?:\d+[.])?\d+$`D';
    Notez que [0-9] peut s'abréger par le symbole \d et {0,} par le quantifieur * (pourquoi suivi d'un autre quantifieur + ?).

    Pourquoi faire un test supplémentaire avec ctype_digit puisque l'expression régulière pourrait le faire (par une alternative ou le quantifieur ? - {0,1} - par exemple). Attention, | est un opérateur de bit (ou logique sur les bits) et non l'opérateur logique ou (|| ou or mais sont de priorité différente).

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Par défaut
    L'option D n'apparait pas dans la doc php en ligne, c'est dommage (http://fr.php.net/manual/fr/referenc...ern.syntax.php)

    Je faisait appel à ctype_digit en pensant qu'il était optimisé, plus rapide qu'un preg_match... mais apparement je me suis trompé.

    Merci pour la réponse efficace

  4. #4
    Membre expérimenté

    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
    Par défaut
    Si cette option est bien mentionnée dans la documentation mais à la page des options et non à celle de la syntaxe des masques : options de recherche. Ou encore dans le tutoriel d'initiation aux expressions régulières en PHP : Le modificateur D.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Par défaut
    Pour info, la même version, mais qui autorise des réels (float) négatif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern ='`^(?:[-])?\d+(?:[.]\d+)?$`D';

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/12/2008, 23h33
  2. Div en float:left dans une autre div
    Par sandytarit dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 29/11/2007, 14h31
  3. Localhost qui tourne sans arrêt et rien d'autre
    Par __fabrice dans le forum Apache
    Réponses: 3
    Dernier message: 22/03/2007, 23h16
  4. [ADSL] Prb club internet, connexion et rien d'autre
    Par arnolem dans le forum Dépannage et Assistance
    Réponses: 5
    Dernier message: 28/10/2005, 12h51
  5. Une torche et rien d'autre
    Par Ghost Dog dans le forum OpenGL
    Réponses: 11
    Dernier message: 29/03/2005, 19h17

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