2017-03-09 1 views
0

J'ai un RegularExpressionValidator dans un code .net qui ne doit autoriser que 000.00000001% -100.00000000%. J'ai ce qui suit, mais ensuite réalisé qu'il permet toutes les formes de «0».Comment configurer un Regex pour 000.00000001% -100.00000000%

(^ 0? [0-9]? [0-9]?) (. \ D {0,8})? \ S? \%? $ | (^ 100 (. [0] {0 , 8})? \ s? \%? $)

(Il est intentionnel de permettre un potentiel '%' ou '%' à la fin.)

Je veux empêcher l'entrée de tous entrées qui assimilent à '0' tels que:

000,0

000,00

~

.00000000

Je vous remercie de toute aide fournie. Merci!

+0

Je pense vraiment que vous pouvez simplifier (je pourrais poster un nouveau nouvelle regex si j'ai le temps d'y réfléchir). En attendant, essayez de doubler l'expression et insérez un "1" obligatoire au milieu (quelque chose comme ((..) 1 \. (...) | \. (...) 1 (...)) avec "(...)" pour vos "décimales x 0 ou 1" – Carele

+0

Pas clair, devrait-il correspondre à 01.00? et 1.001? En règle générale, chaque fois que vous avez une plage numérique, habituellement une regex n'est pas le chemin à parcourir pour le valider.Vous allez soit vous retrouver avec une regex vraiment complexe, soit même ne pas pouvoir l'utiliser avec une regex – m0skit0

Répondre

2

Je vais utiliser votre regex:

(^0?[0-9]?[0-9]?)(.\d{0,8})?\s?\%?$|(^100(.[0]{0,8})?\s?\%?$) 

simplifier un peu:

^0?\d{0,2}(.\d{0,8})?\s?%?$|^100(.0{0,8})?\s?%?$ 

Fixer les points:

^0?\d{0,2}(\.\d{0,8})?\s?%?$|^100(\.0{0,8})?\s?%?$ 

Réorganiser: il

^(0?\d{0,2}(\.\d{0,8})?|100(\.0{0,8})?)\s?%?$ 

Construct la préanalyse suivante pour vous assurer ne correspond pas à quelque chose zeroish:

(?!0*\.?0*\s?%?$) 

Et préfixer au regex:

(?!0*\.?0*\s?%?$)^(0?\d{0,2}(\.\d{0,8})?|100(\.0{0,8})?)\s?%?$ 
+0

J'apprécie votre aide et c'est instructif, cependant, cela permet de '.', '.0 ', et vide – rcurrydev

+0

effectivement .0 à .00000000 – rcurrydev

+0

@rcurrydev OK, mise à jour – ndn