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 :

[nombre] ou bien [nombre1 et nombre2] [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 34
    Points
    34
    Par défaut [nombre] ou bien [nombre1 et nombre2]
    Bonsoir,
    Pourriez-vous m’indiquer quelle expression régulière me permettrait de forcer l’utilisateur à saisir au choix :
    -Un nombre N
    -Un nombre N1 suivi du mot ET ou et puis un autre nombre N2
    Sachant que N, N1 et N2 sont des nombres positifs (pas de signe +) ou négatifs, avec décimales (séparateur virgule).La chaine vide est acceptée.L'expression n'est pas sensible à la casse.
    Exemple :
    68->valide
    -123,23->valide
    -145,45 et 452,78-> valide
    55 et 58 et 69->non valide car "et" est présent 2 fois
    et 68->non valide car ne commence pas par un nombre
    33 et->non valide car ne termine pas par un nombre

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    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 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    L'expression n'est pas sensible à la casse.
    "Et" ou "eT" sont bons ?

    12, => Bon ou pas ?
    ,12 => ?

    Montre ce que tu as fait pour qu'on puisse compléter.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    Bonjour Séb. ,
    Désolé mais je ne connaissais pas les expressions régulières et donc je n'avais encore rien écrit
    J’ai lu un tutoriel hier soir.

    1. il aurait fallu que j’aille dans la section Javascript mais bon…
    2. on va autoriser la saisie du point ou de la virgule comme séparateur des décimales


    «12, » et « ,12 » ne sont pas valides.
    Voilà l’expression régulière que je viens d’écrire « /((^-?[0-9]+[,\.]?[0-9]*$)|(^-?[0-9]+,?[0-9]*\set\s+-?[0-9]+[,\.]?[0-9]*$))/i ».
    (Pour le PHP,je crois qu' il faut remplacer le /....../i par #......#i)
    Il faut maintenant que je teste cette expression. Qu’en pensez-vous ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    Désolé pour la coquille.
    L'expression régulière que je propose est la suivante:
    /((^-?[0-9]+[,\.]?[0-9]*$)|(^-?[0-9]+[,\.]?[0-9]*\set\s+-?[0-9]+[,\.]?[0-9]*$))/i

  5. #5
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut,

    Je viens de tester ceci :
    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
    <?php
    $number_pattern = '-?\d+((,|\.)\d*)?'; // Pattern représentant un nombre
    $pattern = sprintf('/^%1$s( et %1$s)?$/i', $number_pattern); // Pattern global
     
    $subjects = array( '68', '-68', '-68,', '-123,23', '-123.23', '-123;23', '-145,45 et 452,78', '55 et 58 et 69', 'et 68', '33 et' );
     
    foreach ($subjects as $subject) {
    	echo '<p>';
    	echo $subject;
    	echo ' : ';
     
    	echo ( preg_match($pattern, $subject) ? 'valide' : 'non valide' );
     
    	echo '</p>';
    }
    ?>
    Résultats :
    68 : valide

    -68 : valide

    -68, : valide

    -123,23 : valide

    -123.23 : valide

    -123;23 : non valide

    -145,45 et 452,78 : valide

    55 et 58 et 69 : non valide

    et 68 : non valide

    33 et : non valide
    J'ai utilisé la fonction sprintf pour éviter de recopier le pattern d'un nombre et avoir une meilleure lisibilité pour l'exemple.

    Il est préférable d'écrire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/^-?\d+((,|\.)\d*)?( et -?\d+((,|\.)\d*)?)?$/i'; // Pattern global
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    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 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Pour éviter le "12," je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $number_pattern = '-?\d+([,.]\d+)?' ;
    (je chipote) Pour éviter que la parenthèse ne capture inutilement le motif on peut aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $number_pattern = '-?\d+(?:[,.]\d+)?' ;
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    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 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Casshern Voir le message
    il aurait fallu que j’aille dans la section Javascript mais bon…
    Les vérifs JS ne sont pas fiables. Il faut toujours au moins faire les validations côté serveur.

    (Pour le PHP,je crois qu' il faut remplacer le /....../i par #......#i)
    Pas obligatoire : http://fr.php.net/manual/en/regexp.r...delimiters.php
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Citation Envoyé par Séb.
    Pour éviter le "12," je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $number_pattern = '-?\d+([,.]\d+)?' ;
    En effet, je n'avais pas vu la réponse de Casshern

    Citation Envoyé par Séb.
    (je chipote) Pour éviter que la parenthèse ne capture inutilement le motif on peut aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $number_pattern = '-?\d+(?:[,.]\d+)?' ;
    Exacte, il faudrait aussi en mettre dans le pattern global
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    Merci à tous les deux pour votre aide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/03/2008, 11h01
  2. Nombre pair ou bien impair
    Par monoar dans le forum Ruby
    Réponses: 10
    Dernier message: 12/08/2007, 21h21
  3. Réponses: 2
    Dernier message: 13/04/2007, 07h09
  4. vérifier que l'utilisateur entre bien un nombre
    Par youp_db dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/11/2006, 10h10
  5. Réponses: 3
    Dernier message: 12/10/2006, 16h39

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