Expression régulière pour tout nombre supérieur à 0? [fermé]
14 réponses
Je ne sais pas comment MVC est pertinent, mais si votre ID est un entier, ce BRE devrait faire:
^[1-9][0-9]*$
si vous voulez faire correspondre des nombres réels (flotteurs) plutôt que des entiers, vous devez gérer le cas ci-dessus, avec les nombres décimaux normaux (i.e. 2.5
ou 3.3̅
), les cas où votre modèle est entre 0 et 1 (i.e. 0.25
), aussi bien que le cas où votre modèle a une partie décimale qui est 0. (c'est à dire 2.0
). Et pendant que nous y sommes, nous allons ajouter le soutien pour diriger des zéros sur des entiers (i.e. 005
):
^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$
notez que cette seconde est une RE prolongée. La même chose peut être exprimée en ré basique, mais presque tout comprend avant ces jours. Décomposons l'expression en parties plus faciles à digérer.
^(
le signe d'insertion correspond au nul au début de la ligne, donc avant votre regex avec un signe d'insertion il au début de ligne. La parenthèse d'ouverture est là à cause de la barre d'or, ci-dessous. Plus sur cela plus tard.
0*[1-9][0-9]*(\.[0-9]+)?
correspond à tout nombre entier ou à tout nombre de virgule flottante supérieur à 1. Donc notre 2.0
correspondrait, mais pas 0.25
. Le 0*
au départ gère zéros de tête, donc 005 == 5
.
|
le caractère du tuyau est un " ou-bar " dans ce contexte. Pour les besoins de l'évaluation de cette expression, elle a priorité plus élevée que tout le reste, et unit effectivement deux expressions régulières ensemble. Les parenthèses sont utilisées pour grouper des expressions multiples séparées par des barres ou.
et la deuxième partie:
0+\.[0-9]*[1-9][0-9]*
correspond à tout nombre commençant par un ou plusieurs caractères 0
(remplacer +
par *
pour correspondre à zéro ou plus de zéros, c.-à-d. .25
), suivie par une période, suivi par une chaîne de chiffres qui comprend au moins un qui n'est pas un 0
. Donc ça correspond à tout au-dessus de 0
et au-dessous de 1
.
)$
et enfin, nous fermons les parenthèses et ancrons la regex à la fin de la ligne avec le signe du dollar, tout comme le caret ancre au début de la ligne.
bien sûr, si vous laissez votre langage de programmation évaluer numériquement plutôt que d'essayer de le faire correspondre à une expression régulière, vous économiserez des maux de tête et CPU.
si vous voulez seulement des entiers non négatifs, essayez:
^\d+$
je pense que la meilleure solution est d'ajouter le signe + entre les deux crochets de l'expression regex:
^[1-9]+[0-9]*$
et voilà:
MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");
sur "soumettre":
if(myMatches.Count > 0)
{
//do whatever you want
}
j'ai essayé celui-ci et il a fonctionné pour moi pour tous les nombres décimaux/entiers supérieurs à zéro
permet un espace blanc: ^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
pas d'espace blanc: ^(?=.*[1-9])\d*(?:\.\d{1,2})?$
référence: Regex supérieur à zéro avec 2 décimales
vous pouvez utiliser l'expression suivante:
(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)
entrées valides: 1 1. 1.1 1.0 tous les nombres réels positifs
entrées invalides: tous les nombres négatifs réels et 0 et 0.0
simplifié uniquement pour 2 décimales.
^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
je pense que cela fonctionnerait parfaitement:
([1-9][0-9]*(\.[0-9]*[1-9])?|0\.[0-9]*[1-9])
Valide:
1
1.2
1.02
0.1
0.02
non valide :
0
01
01.2
1.10