Token regex yang valid bervariasi menurut penerapan. Bentuk generik adalah:
[0-9]+(\.[0-9][0-9]?)?
Lebih kompak:
\d+(\.\d{1,2})?
Keduanya berasumsi bahwa keduanya memiliki setidaknya satu digit sebelum dan satu setelah tempat desimal.
Untuk mengharuskan seluruh string adalah sejumlah formulir ini, bungkus ekspresi dalam tag awal dan akhir seperti (dalam bentuk Perl):
^\d+(\.\d{1,2})?$
Untuk mencocokkan angka tanpa digit terdepan sebelum desimal ( .12) dan seluruh angka memiliki periode trailing ( 12.) sambil mengecualikan input periode tunggal ( .), coba yang berikut ini:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
Ditambahkan
Membungkus bagian pecahan ()?untuk membuatnya opsional. Perlu diketahui bahwa ini mengecualikan formulir seperti 12. Termasuk yang akan lebih seperti ^\d+\\.?\d{0,2}$.
Ditambahkan
Gunakan ^\d{1,6}(\.\d{1,2})?$untuk menghentikan pengulangan dan memberikan batasan untuk seluruh bagian dari nilai desimal.
Secara matematis, saya pikir angka 2 presisi harus selalu memiliki dua desimal bahkan jika yang terakhir adalah nol. Ini berdasarkan pengalaman saya dengan angka-angka signifikan sehingga bisa salah, tetapi Anda tidak benar-benar tahu apakah 1,7 adalah 1,70 atau angka dari 1,70 hingga 1,74.
paxdiablo
Terima kasih! Itulah yang saya butuhkan :) +1
alex
6
ini cocok dengan 0001.00: /
redben
2
Menambahkan '-?' dalam hal ini ^ \ d + (\. \ d {1,2})? $ ===> ^ -? \ d + (\. \ d {1,2})? $ untuk mendukung -ve
Murali Murugesan
1
@BimalDas, Anda dapat mendukung negatif dengan mengawali ekspresi dengan -?, seperti pada -?\d+(\.\d{1,2})?. Saya tidak memasukkan negatif atau mulai dengan titik desimal karena tidak ada dalam pertanyaan OP, meskipun mereka pasti valid untuk format angka yang lebih umum. Utas komentar di sini memberikan beberapa cara untuk menangani ".21".
DocMax
276
^[0-9]+(\.[0-9]{1,2})?$
Dan karena ekspresi reguler mengerikan untuk dibaca, apalagi dipahami, inilah persamaan verbose:
^# Start of string[0-9]+# Require one or more numbers(# Begin optional group
\. # Point must be escaped or it is treated as "any character"[0-9]{1,2}# One or two numbers)?# End group--signify that it's optional with "?"
$ # End of string
Anda dapat menggantinya [0-9]dengan \dsebagian besar implementasi ekspresi reguler (termasuk PCRE , yang paling umum). Saya meninggalkannya [0-9]karena saya pikir itu lebih mudah dibaca.
Juga, ini adalah skrip Python sederhana yang saya gunakan untuk memeriksanya:
import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")
valid =["123.12","2","56754","92929292929292.12","0.21","3.1"]
invalid =["12.1232","2.23332","e666.76"]assert len([deci_num_checker.match(x)!=Nonefor x in valid])== len(valid)assert[deci_num_checker.match(x)==Nonefor x in invalid].count(False)==0
Untuk pengguna Java: desimal tidak boleh diloloskan.
3
@Gracchus Anda yakin? Mungkin seharusnya \\.bukan \.karena .akan terlihat berfungsi, tetapi cocok dengan karakter apa pun (bukan hanya tempat desimal). Misalnya, keduanya 1z23dan 1.23mungkin dianggap sah jika Anda tidak menghindarinya
dbr
@ dbr Mungkin memang seharusnya begitu. Java hanya mengeluhkan pelarian yang tidak patut. Menghapus "memperbaikinya" (diam), lol. Saya belum punya kesempatan untuk mengujinya sepenuhnya.
20
Untuk memasukkan tanda minus opsional dan untuk melarang angka seperti 015(yang dapat disalahartikan sebagai angka oktal) tulis:
Saya menggunakan ini sampai dua tempat desimal: (^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
melewati:
0,25
0,25
10,25
0,25
Akan membuat hal-hal seperti 12.diterima. Ini bukan yang umum diterima tetapi jika Anda perlu "fleksibel", itu adalah salah satu cara untuk pergi. Dan tentu saja [0-9]bisa diganti dengan \d, tapi saya kira lebih mudah dibaca dengan cara ini.
Ya, terima kasih atas koreksi Anda. Saya pikir ini hanya untuk angka desimal
Nambi_0915
([0-9]+)?lebih baik ditulis \d*. Sekarang tidak cocok 10e3. Dan OP ingin mencocokkan hingga 2 digit.
Toto
-1
functionDecimalNumberValidation(){var amounttext =;if(!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
alert('Please enter only numbers into amount textbox.')}else{
alert('Right Number');}}
fungsi akan memvalidasi angka cuaca apa pun nomor desimal memiliki tempat desimal atau tidak, ia akan mengatakan "Nomor Kanan" bijaksana "Silakan masukkan hanya angka ke dalam kotak teks jumlah." pesan peringatan akan muncul.
Jawaban:
Token regex yang valid bervariasi menurut penerapan. Bentuk generik adalah:
Lebih kompak:
Keduanya berasumsi bahwa keduanya memiliki setidaknya satu digit sebelum dan satu setelah tempat desimal.
Untuk mengharuskan seluruh string adalah sejumlah formulir ini, bungkus ekspresi dalam tag awal dan akhir seperti (dalam bentuk Perl):
Untuk mencocokkan angka tanpa digit terdepan sebelum desimal (
.12
) dan seluruh angka memiliki periode trailing (12.
) sambil mengecualikan input periode tunggal (.
), coba yang berikut ini:Ditambahkan
Membungkus bagian pecahan
()?
untuk membuatnya opsional. Perlu diketahui bahwa ini mengecualikan formulir seperti12.
Termasuk yang akan lebih seperti^\d+\\.?\d{0,2}$
.Ditambahkan
Gunakan
^\d{1,6}(\.\d{1,2})?$
untuk menghentikan pengulangan dan memberikan batasan untuk seluruh bagian dari nilai desimal.sumber
-?
, seperti pada-?\d+(\.\d{1,2})?
. Saya tidak memasukkan negatif atau mulai dengan titik desimal karena tidak ada dalam pertanyaan OP, meskipun mereka pasti valid untuk format angka yang lebih umum. Utas komentar di sini memberikan beberapa cara untuk menangani ".21".Dan karena ekspresi reguler mengerikan untuk dibaca, apalagi dipahami, inilah persamaan verbose:
Anda dapat menggantinya
[0-9]
dengan\d
sebagian besar implementasi ekspresi reguler (termasuk PCRE , yang paling umum). Saya meninggalkannya[0-9]
karena saya pikir itu lebih mudah dibaca.Juga, ini adalah skrip Python sederhana yang saya gunakan untuk memeriksanya:
sumber
+
setelah paren penutupan pertama,^([0-9]{0,3})(\.[0-9]{1,2})?$
\\.
bukan\.
karena.
akan terlihat berfungsi, tetapi cocok dengan karakter apa pun (bukan hanya tempat desimal). Misalnya, keduanya1z23
dan1.23
mungkin dianggap sah jika Anda tidak menghindarinyaUntuk memasukkan tanda minus opsional dan untuk melarang angka seperti
015
(yang dapat disalahartikan sebagai angka oktal) tulis:sumber
Untuk angka yang tidak memiliki pemisah ribuan, saya suka regex sederhana dan ringkas ini:
atau, tidak terbatas pada ketelitian 2:
Yang terakhir cocok dengan
1
100
100.
100,74
100,7
0,7
0,7
.72
Dan itu tidak cocok dengan string kosong (seperti \ d *.? \ D * akan)
sumber
Saya menggunakan ini sampai dua tempat desimal:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
melewati:0,25
0,25
10,25
0,25
tidak lulus:
-.25
01.25
1.
1,256
sumber
Akan membuat hal-hal seperti
12.
diterima. Ini bukan yang umum diterima tetapi jika Anda perlu "fleksibel", itu adalah salah satu cara untuk pergi. Dan tentu saja[0-9]
bisa diganti dengan\d
, tapi saya kira lebih mudah dibaca dengan cara ini.sumber
Coba ini
Ini akan memungkinkan tanda-tanda positif dan negatif juga.
sumber
Jawaban utama SALAH karena valid
5.
atau5,
inputkode ini menanganinya (tetapi dalam contoh saya angka negatif dilarang):
hasilnya di bawah ini:
sumber
sumber
Secara umum, yaitu tempat desimal tak terbatas:
^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
.sumber
Tidak akan Anda perlu mengambil
e
die666.76
dalam akun?Dengan
sumber
menambahkan jawaban saya juga, seseorang mungkin menemukan itu berguna atau mungkin juga milik saya.
sumber
Ini bekerja dengan saya:
Grup 1 adalah angka float Anda dan grup 2 adalah fraksi saja.
sumber
Saya mencoba satu dengan proyek saya. Ini memungkinkan angka dengan
+ | -
tanda juga.sumber
Chrome 56 tidak menerima pola semacam ini (Chrome 56 menerima 11.11. Tambahan.) Dengan nomor jenis, gunakan jenis sebagai teks sebagai kemajuan.
sumber
Ini akan memungkinkan desimal dengan eksponensial dan hingga 2 digit,
Demo
sumber
1.2e-10
([0-9]+)?
lebih baik ditulis\d*
. Sekarang tidak cocok10e3
. Dan OP ingin mencocokkan hingga 2 digit.fungsi akan memvalidasi angka cuaca apa pun nomor desimal memiliki tempat desimal atau tidak, ia akan mengatakan "Nomor Kanan" bijaksana "Silakan masukkan hanya angka ke dalam kotak teks jumlah." pesan peringatan akan muncul.
Terima kasih ... :)
sumber