web-dev-qa-db-fra.com

Quelle est l'expression régulière pour "Tout entier positif, à l'exclusion de 0"

Comment puis ^\d+$ être amélioré pour interdire 0?

EDIT (Rendez-le plus concret):

Exemples à autoriser:
1
30
111
Exemples à interdire:
0
00
- 22

Peu importe que les nombres positifs précédés de zéro soient autorisés ou non (par exemple, 022).

Ceci est pour Java JDK Regex.

81
Zeemee

Essaye ça:

^[1-9]\d*$

... et un remplissage supérieur à 30 caractères SO limite de réponse :-).

Voici une démo

156
Tomasz Nurkiewicz

Désolé de rentrer tard mais le PO veut autoriser 076 mais ne veut probablement PAS autoriser 0000000000.

Donc, dans ce cas, nous voulons un chaîne d'un ou plusieurs chiffres contenant au moins un différent de zéro. C'est

^[0-9]*[1-9][0-9]*$
64
Ray Toal

Vous pouvez essayer une affirmation négative prévisible:

^(?!0+$)\d+$

Essayez celui-ci, celui-ci fonctionne mieux pour suffire à l'exigence.

[1-9][0-9]*

Voici l'exemple de sortie

String 0 matches regex: false
String 1 matches regex: true
String 2 matches regex: true
String 3 matches regex: true
String 4 matches regex: true
String 5 matches regex: true
String 6 matches regex: true
String 7 matches regex: true
String 8 matches regex: true
String 9 matches regex: true
String 10 matches regex: true
String 11 matches regex: true
String 12 matches regex: true
String 13 matches regex: true
String 14 matches regex: true
String 15 matches regex: true
String 16 matches regex: true
String 999 matches regex: true
String 2654 matches regex: true
String 25633 matches regex: true
String 254444 matches regex: true
String 0.1 matches regex: false
String 0.2 matches regex: false
String 0.3 matches regex: false
String -1 matches regex: false
String -2 matches regex: false
String -5 matches regex: false
String -6 matches regex: false
String -6.8 matches regex: false
String -9 matches regex: false
String -54 matches regex: false
String -29 matches regex: false
String 1000 matches regex: true
String 100000 matches regex: true
8
Palash Kanti Kundu

^\d*[1-9]\d*$

cela peut inclure toutes les valeurs positives, même si elle est complétée par un zéro à l'avant

Permet

1

01

dix

11 etc

ne permettent pas

00

000 etc.

7
manoj

J'ai eu celui-ci:

^[1-9]|[0-9]{2,}$

Quelqu'un le bat? :)

2
Zeemee

Vous voudrez peut-être ceci (edit: permettre numéro de la forme 0123):

^\\+?[1-9]$|^\\+?\d+$

cependant, si c'était moi, je ferais plutôt

int x = Integer.parseInt(s)
if (x > 0) {...}
2
Lie Ryan

Juste pour le plaisir, une autre alternative à l'aide de lookaheads:

^(?=\d*[1-9])\d+$

Autant de chiffres que vous voulez, mais au moins un doit être [1-9].

1
porges

Mon modèle est compliqué, mais il couvre exactement "Tout entier positif, à l'exclusion de 0" (1 - 2147483647, pas long). C'est pour les nombres décimaux et ne permet pas les zéros non significatifs.

^((1?[1-9][0-9]{0,8})|20[0-9]{8}|(21[0-3][0-9]{7})|(214[0-6][0-9]{6})
|(2147[0-3][0-9]{5})|(21474[0-7][0-9]{4})|(214748[0-2][0-9]{3})
|(2147483[0-5][0-9]{2})|(21474836[0-3][0-9])|(214748364[0-7]))$
0
OleksiiMLD

Tout entier positif, à l'exclusion de 0: ^\+?[1-9]\d*$
Tout entier positif, y compris 0: ^(0|\+?[1-9]\d*)$

0
user11856357

Ce RegEx correspond à tout positif sur 0:

(?<!-)(?<!\d)[1-9][0-9]*

Cela fonctionne avec deux types de recherche négatifs, qui recherchent un moins avant un nombre, ce qui indique qu'il s'agit d'un nombre négatif. Cela fonctionne également pour tout nombre négatif supérieur à -9 (par exemple -22).

0
Alexander Hammans