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

C# Discussion :

Regex laisse passer les espaces (alors qu'il ne devrait pas)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut Regex laisse passer les espaces (alors qu'il ne devrait pas)
    Bonjour,
    Afin de faire une TextBox qui n'accepte que des valeurs numériques, j'utilise différent Regex.
    un premier qui filtre les caractères, un second qui vérifie que le texte obtenu est conforme à une valeur numérique en cours d'écriture et un troisième qui vérifie à la fin qu'on a une valeur numérique.
    Or je me retrouve à pouvoir utiliser un espace à la place du point pour le séparateur décimal (j'avais paramétrer mais c'est pas le problème).
    Pourquoi cette expression régulière me laisse passer les espaces :

    @"^[0-9.-]+$"

    Le second Regex qui vérifie le contenu rencontre bien sur le même problème (sinon je ne m'en serait pas aperçu )
    Expresso me dit bien que 12 45 n'est pas valide.
    Je n'ai pas de problème quand je n'ai pas besoin du point ( [0-9]+ marche impec).
    Comment faire pour empêcher les espaces de passer le filtre ?
    merci pour votre aide,
    bon code.
    kerinel

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonsoir,

    Les Regex c'est peut-être un peu "too much" pour ce problème (sans parler du fait que question perf c'est pas forcément le top)

    Tu peux utiliser un contrôle NumericUpDown, il est un peu étudier pour ça (et ergonomiquement, les utilisateurs sauront que c'est un nombre qu'il faut).
    Tu peux aussi utiliser un MaskedTextBox, là je m'attarderais pas plus, je ne l'utilise pas vraiment personnellement.
    Sinon tu peux très bien garder ton TextBox, mais plutôt gérer son évènement KeyPress (ou KeyDown) et limiter la saisie aux chiffres, séparateur, touche Suppr etc.

    Cordialement !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le point est un caractères spécial en regex, et il signifie "n'importe quel caractère"... il faut donc l'échapper si tu veux vraiment que ça match un point, ce qui donne @"^[0-9\.-]+$".

    Cela dit, ce n'est pas suffisant, parce qu'avec ça tu vas matcher un truc du genre "1.2.3", qui n'est pas un nombre valide... Il faut gérer les 2 cas :
    - entier : \d+- décimal, avec ou sans le 0 initial : \d*\.\d+(\d signifie "un chiffre")

    En combinant les 2, ça donne ça : @"(\d+)|(\d*\.\+)".

    Ou encore, pour éviter le "OU" : @"(\d*\.)?\d+".

    (pas testé, je décline toute responsabilité )

Discussions similaires

  1. Réponses: 9
    Dernier message: 02/08/2013, 09h27
  2. Réponses: 4
    Dernier message: 19/11/2011, 21h57
  3. Image de fonds qui bouge (alors qu'elle ne devrait pas)
    Par koukic11 dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 01/02/2010, 09h57
  4. Réponses: 3
    Dernier message: 24/04/2008, 18h25
  5. Réponses: 15
    Dernier message: 25/09/2005, 23h31

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