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

Android Discussion :

Pattern - filtre pour EditText


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut Pattern - filtre pour EditText
    Bonjour,
    j'essai de faire des filtres pour des edittext mais c'est le truc que je ne comprends absolument pas.
    J'aimerai faire un filtre de ce format : hh:ss-hh:ss

    J'ai fais 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
        private boolean checkSyntaxTs(String timestamp) {
            boolean isValid = false;
            if (timestamp.isEmpty() || timestamp.equals(""))
                return true;
            String expression = "^[0-9]{2}:[0-9]{2}-[0-9]{2}:[0-9]{2}$";
     
            Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(timestamp);
            if (matcher.matches()) {
                Log.w("format", "match"); //n'atteins jamais ce point
                String[] periode1 = timestamp.split("-");
                String[] periode1bis1 = periode1[0].split(":");
                String[] periode1bis2 = periode1[1].split(":");
     
                int hh1 = Integer.parseInt(periode1bis1[0]);
                int hh2 = Integer.parseInt(periode1bis2[0]);
     
                int mm1 = Integer.parseInt(periode1bis1[1]);
                int mm2 = Integer.parseInt(periode1bis2[1]);
                if (hh1 < hh2) {
                    if (hh2 < 24)
                        isValid = true;
                } else if (hh1 == hh2) {
                    if (mm1 < mm2) {
                        if (mm2 < 60)
                            isValid = true;
                    }
                }
            }
     
            return isValid;
        }
    même si j'entre 02:30-04:40, je n’atteins pas le Log, j'imagine que le pattern n'est pas bon...

    Quel serait donc le bon pattern svp ?

    Cordialement.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Tu peux remplacer timestamp.isEmpty() || timestamp.equals("") par un TextUtils.isEmpty(timestamp).
    Pour ta regex, je viens de la tester sur http://www.regexplanet.com/advanced/java/index.html et elle match. Au passage, tu pourrais l'améliorer avec des groupes pour ne pas avoir à faire le parsing à la main ensuite.
    Tu es sûr que la chaîne que tu vérifies est bien "02:30-04:40" et que celle-ci ne contient pas de caractères non-visible (comme un saut de ligne, par exemple) ?
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Bonjour,
    merci .
    Le lien je ne le connaissais pas.^^
    Effectivement il y avait un " " qui se plaçait à la fin, du coup en affichant un Log ça passait à travers.

    tu pourrais l'améliorer avec des groupes
    c'est à dire ?

    J'avais pensé faire caractère par caractère mais 29h aurait été possible du coup il aurait aussi fallu parser.

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Si ta limite est est de ne dépasser 24 (pour les heures) et 60 (pour les minutes), il vaut mieux chopper les valeurs avec la regex pour faire un contrôle ensuite, ce que tu fais déjà. La regex peut aussi faire le contrôle, mais niveau maintenance et lisibilité, ça ne va pas être ça.

    Avec des groupes et en utilisant le placeholder \d pour [0-9], ça donnera ça : ^(\d{2}):(\d{2})-(\d{2}):(\d{2})$ .
    Chaque paire de parenthèse représente un groupe capturé. Tu auras donc 1 match et 4 groupes normalement. Le match sera la chaîne entière. Chaque groupe sera, dans l'ordre, : heures ; minutes ; heures ; minutes, que tu prendras avec un matcher.group(X) (où X est le numéro du groupe (indexé à 1), 0 représentant l'intégralité du match).
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    ok, merci pour ces infos. Je tenterai d'appliquer les groupes. Si ça ne marche pas je laisserai tel que c'est, les EditText n'étant pas destinés à être utilisés constamment..

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

Discussions similaires

  1. Filtre pour un état
    Par Mr T 94 dans le forum IHM
    Réponses: 2
    Dernier message: 19/01/2007, 02h32
  2. [C#] Plusieurs filtres pour le FileSystemWatcher
    Par djoao dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/12/2006, 23h49
  3. [FileDialog]Filtre pour les extensions
    Par louby dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 21/08/2006, 16h52
  4. Filtre pour les dates
    Par aliwassem dans le forum Bases de données
    Réponses: 11
    Dernier message: 21/02/2006, 11h48
  5. Filtres pour GraphEdit
    Par jackjack dans le forum DirectX
    Réponses: 2
    Dernier message: 23/05/2003, 14h45

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