Précédent   Forum des professionnels en informatique > Dotnet > Langages > C#
C# Forum d'entraide sur la programmation C#. Avant de poster -> FAQ C#, Articles C#, Sources C#
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2012, 18h50   #1
Membre du Club
 
Avatar de kerinel
 
Inscription : février 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 98
Points : 69
Points : 69
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
kerinel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 19h04   #2
Membre chevronné
 
Avatar de Sehnsucht
 
Homme Mickaël
Développeur .NET
Inscription : octobre 2008
Messages : 404
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 28
Localisation : France, Lot et Garonne (Aquitaine)

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : octobre 2008
Messages : 404
Points : 786
Points : 786
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 !
__________________
Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )

À quelle heure dormez-vous ?
Sehnsucht est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 23h17   #3
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 748
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
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 : 16 748
Points : 26 738
Points : 26 738
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é )
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h51.


 
 
 
 
Partenaires

Hébergement Web