Jak można ^\d+$
ulepszyć zakazanie 0
?
EDYTUJ (uczyń go bardziej konkretnym):
Przykłady dozwolonych:
1
30
111
Przykłady zakazu:
0
00
-22
Nie ma znaczenia, czy liczby dodatnie z zerem wiodącym są dozwolone, czy nie (np 022
.).
Dotyczy to implementacji Java JDK Regex.
076
?Odpowiedzi:
Spróbuj tego:
^[1-9]\d*$
... i trochę dopełnienia, aby przekroczyć 30-znakowy limit odpowiedzi SO :-).
Oto Demo
źródło
^[1-9]+$
działać?^[1-9]+$
nie pozwoli na 10^[1-9]+$
nie pozwoli10
. @Mulmoth - sugestia pozwoli1
, ponieważ\d*
pasuje zero lub więcej razy. Jednak nie pozwoli076
, ponieważ to nie zaczyna się od[1-9]
.01
?Przepraszam, że spóźniłem się, ale OP chce zezwolić,
076
ale prawdopodobnie NIE chce0000000000
.W tym przypadku chcemy, aby ciąg jednej lub więcej cyfr zawierał co najmniej jedną wartość różną od zera . To jest
^[0-9]*[1-9][0-9]*$
źródło
^[0-9]*[1-9][0-9]*(\.[0-9]+)$
ale to jest założenie, co masz na myśli, mówiąc o „dziesiętnym”. Czy potrzebujesz części potęgi? To dość skomplikowane, więc zadaj kolejne pytanie.^0*[1-9]\d*$
ponieważ pierwszy[0-9]*
jest aktywny tylko do momentu[1-9]
znalezienia pierwszej wartości niezerowej, czyli jest aktywny tylko do początkowych zer (0*
).Możesz spróbować negatywnej asercji wybiegającej w przód:
^(?!0+$)\d+$
źródło
Spróbuj tego, ten działa najlepiej, aby zaspokoić wymagania.
[1-9][0-9]*
Oto przykładowe dane wyjściowe
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
źródło
[1-9]\d*
.^\d*[1-9]\d*$
może to obejmować wszystkie wartości dodatnie, nawet jeśli z przodu jest wypełnione zerami
Pozwala
1
01
10
11 itp
nie pozwalaj
0
00
000 itd.
źródło
Dowolna dodatnia liczba całkowita, z wyłączeniem 0:
^\+?[1-9]\d*$
Dowolna dodatnia liczba całkowita, w tym 0:
^(0|\+?[1-9]\d*)$
źródło
Mam ten:
^[1-9]|[0-9]{2,}$
Ktoś to bije? :)
źródło
00
Czy chcesz tego? I to pozwoli1aaaaa
iabcd01
.^
należy tylko do pierwszej alternatywy i$
tylko do drugiej, aby rozwiązać ten problem, umieść wokół niej nawiasy^([1-9]|[0-9]{2,})$
000000000
. Powiedziałeś dowolną liczbę całkowitą z wyłączeniem zera .Dla zabawy, kolejna alternatywa dla lookaheads:
^(?=\d*[1-9])\d+$
Tyle cyfr, ile chcesz, ale przynajmniej jedna musi być
[1-9]
.źródło
Możesz tego chcieć (edytuj: zezwól na numer formularza
0123
):^\\+?[1-9]$|^\\+?\d+$
jednak gdybym to był ja, zrobiłbym to zamiast tego
int x = Integer.parseInt(s) if (x > 0) {...}
źródło
Integer.parseInt()
samo w sobie dodaje bardzo niewiele narzutów. To wyrzucanie i łapanie wyjątków jest drogie.\\+?
prefiksami? Zgaduję, że ma to być znak ucieczki plus, tak jak pojawiłby się w kodzie źródłowym Java, ale dlaczego? Jeśli znaki minus nie są dozwolone, myślę, że można bezpiecznie założyć, że znaki plus również są wyłączone.To wyrażenie regularne pasuje do dowolnej liczby całkowitej dodatniej z 0:
(?<!-)(?<!\d)[1-9][0-9]*
Działa z dwoma ujemnymi wybiegami wstecznymi, które szukają minus przed liczbą, co wskazuje, że jest to liczba ujemna. Działa również dla każdej liczby ujemnej większej niż -9 (np. -22).
źródło
Mój wzorzec jest skomplikowany, ale obejmuje dokładnie „Dowolną dodatnią liczbę całkowitą z wyłączeniem 0” (1 - 2147483647, krótka). Dotyczy liczb dziesiętnych i nie zezwala na zera wiodące.
^((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]))$
źródło
^ [1-9] * $ jest najprostszym, jaki przychodzi mi do głowy
źródło
10
i29303
. Dopasuje również pusty ciąg.Powinno to dopuszczać tylko liczby dziesiętne> 0
^([0-9]\.\d+)|([1-9]\d*\.?\d*)$
źródło