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 chaîne entre x et y caractères contenant au moins un chiffre [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut Regex chaîne entre x et y caractères contenant au moins un chiffre
    Bonjour,

    J'essaie de vérifier au travers d'une expression régulière que la longueur d'une chaîne de caractère soit comprise entre 6 et 20 caractères et qu'elle contienne au moins 1 chiffre, peu importe sa position. La chaîne est susceptible de contenir n'importe quels autres caractères.

    Je tente donc de chercher la présence d'un ou plusieurs digits éventuellement entourés de n'importe quels autres caractères, mais cette solution ne semble pas fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_match('`^(.*\d+.*){6,20}$`', $variable)

    Avez-vous une meilleure idée ?

    Merci,
    Bonne journée

  2. #2
    Membre actif Avatar de polkduran
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 155
    Points : 275
    Points
    275
    Par défaut
    tu peux essayer ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //utilisation des "lookaround"
    //on vérifie la présence d'au moins un chiffre 
    $reg = '`^(?=.*\d).{3,5}$`si';

    je n'ai testé que quelques cas mais en principe ça doit marcher

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    J'ai essayé comme 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
    if (strlen($contenu) >= 6)
    {
    	if(strlen($contenu) <= 20)
    	{
    		if (preg_match( '#[0-9]+#', $contenu))
    		{
    			echo'de 6 à 20 caractères avec au moins un nombre';
    		}
    	}
    	else
    	{
    		echo 'pas bon';
    	}
    }
    ?>

  4. #4
    Membre habitué
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 151
    Points
    151
    Par défaut
    Merci, l'expression de polkduran est parfaite !
    Pour être pointilleux, on pourrait juste signaler l'inutilité de l'option i (insensitive) dans ce cas précis.

    Merci,
    Bonne journée

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    faut aussi éviter de mettre l’opérateur d’exécution comme délimiteur pour les regex

  6. #6
    Membre actif Avatar de polkduran
    Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 155
    Points : 275
    Points
    275
    Par défaut
    c'est aussi une solution mais tu peux mettre toutes tes conditions dans une seule car comme tu l'as mis tu n'as ton "else" que si longueur de ta chaîne est supérieure à 20

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if( strlen($contenu)>=6
        and strlen($contenu)<=20
        and preg_match('`\d`si',$contenu)
      ){
        echo 'tout ok';
     
    }else{
        echo 'pas ok';
    }


    à toi de voir si tu mets tout dans la regex comme celle que j'ai mise dans ma première réponse ou avec ta solution.

    l'avantage avec cette solution est que tu vérifie d'abord la longueur et si elle n'est pas bonne tu n'exécutes pas la regex qui est plus lourde que des simples comparaisons de chaînes car ça ne charge pas le moteur des regex

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Citation Envoyé par polkduran Voir le message
    c'est aussi une solution mais tu peux mettre toutes tes conditions dans une seule car comme tu l'as mis tu n'as ton "else" que si longueur de ta chaîne est supérieure à 20

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if( strlen($contenu)>=6
        and strlen($contenu)<=20
        and preg_match('`\d`si',$contenu)
      ){
        echo 'tout ok';
     
    }else{
        echo 'pas ok';
    }


    à toi de voir si tu mets tout dans la regex comme celle que j'ai mise dans ma première réponse ou avec ta solution.

    l'avantage avec cette solution est que tu vérifie d'abord la longueur et si elle n'est pas bonne tu n'exécutes pas la regex qui est plus lourde que des simples comparaisons de chaînes car ça ne charge pas le moteur des regex

    En effet, je voyais cela comme ça afin d’éviter de lancer la regex si la première condition n'était pas remplie.


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

Discussions similaires

  1. [MySQL] Affichage d’une chaîne de caractères contenant des parenthèses
    Par mathiotp dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/11/2007, 20h31
  2. Réponses: 15
    Dernier message: 10/08/2007, 09h33
  3. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52
  4. Réponses: 3
    Dernier message: 16/03/2006, 16h44
  5. chaîne de caractères contenant \0
    Par bul dans le forum C++
    Réponses: 11
    Dernier message: 03/03/2005, 16h14

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