|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : février 2007 Messages : 98 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() ![]() Mickaël Développeur .NET Inscription : octobre 2008 Messages : 404 ![]() |
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 ? |
|
|
00
|
|
|
#3 |
![]() ![]() Thomas LevesqueDéveloppeur .NET Inscription : février 2004 Messages : 16 748 ![]() |
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... |
|
00
|
Copyright © 2000-2012 - www.developpez.com