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

Shell et commandes GNU Discussion :

expression regulière simple


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut expression regulière simple
    Bonjour je veux tester que ce que l'utilisateur entre via zenety est un nombre de cinq chiffres, du coup je me sert d'une expression régulière qui marche à moitié, elle vérifie bien que les cinq premiers caractères sont des entiers mais après le user peut rentrer n'importe quoi et sa marche alors que je ne veux que cinq chiffres voici ma fonction
    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
      get_serial
            {
     
                    while true
                    do
                             serial=$(zenity --entry --text "entrez le numero de serie du disk composé de cinq chiffres")
                            if [[ $serial =~([0-9]){5} ]] ; then
                                     echo $serial
                                    break
                            else
                                    echo " votre numero de serie doit être un nombre composé de cinq chiffre"
                                    continue
                            fi
                    done
            }
    j'ai même fait un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ $serial =~([0-9]){5}$ ]]
    mais ça ne marche pas.
    merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ $serial =~([0-9]){5} ]]
    Je ne pense pas que bash gère ce genre de regex

    Essaie plutôt avec un "grep" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if egrep -qo '\<[0-9]{5}\>' <<<$serial
    then
    ...

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    521
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 521
    Par défaut
    merci zipe31 ça marche.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    Citation Envoyé par zipe31
    Je ne pense pas que bash gère ce genre de regex
    mais si, il le fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for serial in 1234 12345 123456
    do if [[ $serial =~ ^([0-9]){5}$ ]]; then echo ok; else echo KO; fi
    done
    KO
    ok
    KO
    il faut bien délimiter avec ^ et $ pour que bash ne trouve pas le motif n'importe où dans la chaîne.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Citation Envoyé par N_BaH Voir le message
    mais si, il le fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if [[ $serial =~ ^([0-9]){5}$ ]]
    il faut bien délimiter avec ^ et $ pour que bash ne trouve pas le motif n'importe où dans la chaîne.
    Oups

    Merci


    PS. En fait c'était pour voir si tu suivais bien

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

Discussions similaires

  1. Recherche recursive à l'aide des expressions reguliére
    Par titoff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/12/2005, 16h42
  2. [RegEx] aide pour une expression regulière
    Par hugo123 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 15h41
  3. ET dans une expression regulière
    Par kesako dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 12h57
  4. Problème expression regulière ??
    Par panaone dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2005, 13h41
  5. Variables et Expression Regulière
    Par Temari dans le forum Langage
    Réponses: 5
    Dernier message: 05/08/2005, 01h55

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