Что такое регулярное выражение для "Любое положительное целое число, кроме 0" - PullRequest
80 голосов
/ 12 августа 2011

Как можно улучшить ^\d+$, чтобы запретить 0?

РЕДАКТИРОВАТЬ (сделать его более конкретным):

Примеры, чтобы разрешить:
1
30
111
Примеры для запрещения:
0
00
-22

Не имеет значения, если положительные числа сдопускается или не допускается начальный ноль (например, 022).

Это для реализации Java JDK Regex.

Ответы [ 12 ]

153 голосов
/ 12 августа 2011

Попробуйте это:

^[1-9]\d*$

... и некоторые отступы превышают 30-кратный предел ответа SO: -).

62 голосов
/ 12 августа 2011

Извините, что пришел поздно, но ОП хочет разрешить 076, но, вероятно, НЕ хочет разрешить 0000000000.

Таким образом, в этом случае нам нужна строка из одной или нескольких цифр, содержащая хотя бы один ненулевой . Это

^[0-9]*[1-9][0-9]*$
13 голосов
/ 12 августа 2011

Вы можете попробовать отрицательное прогнозное утверждение:

^(?!0+$)\d+$
8 голосов
/ 14 марта 2016

Попробуйте этот, этот работает лучше всего, чтобы удовлетворить потребность.

[1-9][0-9]*

Вот пример вывода

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
7 голосов
/ 26 августа 2015

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

это может включать все положительные значения, даже если оно дополняется нулями спереди

Позволяет

1

01

10

11 и т. Д.

не разрешать

0

00

000 и т. Д.

2 голосов
/ 12 августа 2011

Возможно, вы захотите это (изменить: разрешить номер формы 0123):

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

однако, если бы это был я, я бы вместо этого сделал

int x = Integer.parseInt(s)
if (x > 0) {...}
2 голосов
/ 12 августа 2011

Получил это:

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

Кто-то победил? :)

1 голос
/ 12 августа 2011

Просто для удовольствия, другая альтернатива с использованием lookaheads:

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

Столько цифр, сколько вы хотите, но по крайней мере одна должна быть [1-9].

0 голосов
/ 29 апреля 2019

Мой шаблон сложен, но он охватывает ровно «Любое положительное целое число, кроме 0» (1 - 2147483647, не длинное). Он предназначен для десятичных чисел и не допускает начальные нули.

^((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 голосов
/ 27 апреля 2019

Этот RegEx соответствует любому целочисленному положительному значению из 0:

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

Работает с двумя отрицательными взглядами, которые ищут минус перед числом, что указывает на отрицательное число. Он также работает для любого отрицательного числа больше -9 (например, -22).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...