Bagaimana cara ^\d+$
ditingkatkan menjadi tidak mengizinkan 0
?
EDIT (Buat lebih konkret):
Contoh yang diizinkan:
1
30
111
Contoh yang dilarang:
0
00
-22
Tidak masalah apakah bilangan positif dengan nol di depannya diperbolehkan atau tidak (misalnya 022
).
Ini untuk implementasi Regex JDK Java.
076
,?Jawaban:
Coba ini:
^[1-9]\d*$
... dan beberapa padding melebihi batas jawaban SO 30 karakter :-).
Ini Demo
sumber
^[1-9]+$
berhasil?^[1-9]+$
tidak akan mengizinkan 10^[1-9]+$
tidak mengizinkan10
. @Mulmoth saran akan memungkinkan1
, karena\d*
cocok nol kali atau lebih. Namun, itu tidak akan mengizinkan076
, karena itu tidak dimulai dengan[1-9]
.01
?Maaf terlambat datang tapi OP ingin mengizinkan
076
tapi mungkin TIDAK mau mengizinkan0000000000
.Jadi dalam hal ini kita menginginkan string dengan satu atau lebih digit yang mengandung setidaknya satu bukan nol . Itu adalah
^[0-9]*[1-9][0-9]*$
sumber
^[0-9]*[1-9][0-9]*(\.[0-9]+)$
tapi itu membuat asumsi tentang apa yang Anda maksud dengan "desimal." Apakah Anda membutuhkan bagian eksponen? Ini cukup rumit, jadi tanyakan pertanyaan lain.^0*[1-9]\d*$
karena yang pertama[0-9]*
hanya aktif sampai[1-9]
menemukan yang pertama bukan nol yaitu hanya aktif sampai ada awal nol (0*
).Anda dapat mencoba pernyataan kepala penampil negatif:
^(?!0+$)\d+$
sumber
Coba yang ini, yang ini bekerja paling baik untuk memenuhi persyaratan.
[1-9][0-9]*
Berikut adalah contoh keluarannya
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
sumber
[1-9]\d*
.^\d*[1-9]\d*$
ini dapat mencakup semua nilai positif, meskipun diberi tanda Nol di depan
Izinkan
1
01
10
11 dll
jangan perbolehkan
0
00
000 dll ..
sumber
Semua bilangan bulat positif, tidak termasuk 0:
^\+?[1-9]\d*$
Semua bilangan bulat positif, termasuk 0:
^(0|\+?[1-9]\d*)$
sumber
Punya yang ini:
^[1-9]|[0-9]{2,}$
Seseorang mengalahkannya? :)
sumber
00
Apakah Anda menginginkan ini? Dan itu akan memungkinkan1aaaaa
danabcd01
.^
hanya milik alternatif pertama dan$
hanya untuk yang kedua, untuk menyelesaikan ini menempatkan tanda kurung di sekitarnya^([1-9]|[0-9]{2,})$
000000000
. Anda memang mengatakan bilangan bulat apa pun kecuali nol .Hanya untuk bersenang-senang, alternatif lain menggunakan lookahead:
^(?=\d*[1-9])\d+$
Digit sebanyak yang Anda inginkan, tetapi setidaknya satu digit harus
[1-9]
.sumber
Anda mungkin menginginkan ini (edit: allow number of the form
0123
):^\\+?[1-9]$|^\\+?\d+$
Namun, jika itu saya, saya akan melakukannya
int x = Integer.parseInt(s) if (x > 0) {...}
sumber
Integer.parseInt()
sendirinya menambahkan sedikit biaya tambahan. Melempar dan menangkap pengecualian itulah yang mahal.\\+?
prefiks? Saya menduga itu seharusnya menjadi tanda plus yang lolos seperti yang akan muncul di kode sumber Java, tetapi mengapa? Jika tanda minus tidak diperbolehkan, saya pikir aman untuk mengasumsikan tanda plus juga dihilangkan.RegEx ini cocok dengan semua bilangan bulat positif dari 0:
(?<!-)(?<!\d)[1-9][0-9]*
Ia bekerja dengan dua lookbehinds negatif, yang mencari minus sebelum angka, yang menandakan itu adalah angka negatif. Ini juga berfungsi untuk bilangan negatif apa pun yang lebih besar dari -9 (mis. -22).
sumber
Pola saya rumit, tetapi mencakup persis "Semua bilangan bulat positif, tidak termasuk 0" (1 - 2147483647, tidak panjang). Ini untuk angka desimal dan tidak mengizinkan angka nol di depan.
^((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]))$
sumber
^ [1-9] * $ adalah yang paling sederhana yang dapat saya pikirkan
sumber
10
dan29303
. Ini juga akan cocok dengan string kosong.Ini seharusnya hanya mengizinkan desimal> 0
^([0-9]\.\d+)|([1-9]\d*\.?\d*)$
sumber