Apa ekspresi reguler untuk desimal dengan presisi 2?
Berlaku contoh:
123.12
2
56754
92929292929292.12
0.21
3.1
Tidak valid contoh:
12.1232
2.23332
e666.76
Titik desimal dapat opsional, dan bilangan bulat juga dapat disertakan.
Regex yang berlaku token berbeda dengan pelaksanaan. Bentuk generik adalah:
[0-9]+(\.[0-9][0-9]?)?
Lebih kompak:
\d+(\.\d{1,2})?
Kedua berasumsi bahwa keduanya memiliki setidaknya satu digit sebelum dan satu setelah desimal.
Untuk mengharuskan seluruh string adalah jumlah dari formulir ini, bungkus ekspresi di mulai dan tag akhir seperti (di Perl's form):
^\d+(\.\d{1,2})?$
Untuk mencocokkan angka tanpa diawali angka sebelum desimal (.12
) dan seluruh angka yang memiliki tanda titik (12.
) sementara tidak termasuk masukan dari periode tunggal (.
), coba yang berikut ini:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
Dibungkus bagian fraksional dalam ()?
untuk membuatnya opsional. Diketahui bahwa ini tidak termasuk bentuk-bentuk seperti 12.
Termasuk yang akan lebih suka ^\d+\\.?\d{0,2}$
.
Gunakan ^\d{1,6}(\.\d{1,2})?$
untuk menghentikan pengulangan dan memberikan pembatasan kepada seluruh bagian dari nilai desimal.
^[0-9]+(\.[0-9]{1,2})?$
Dan karena ekspresi reguler yang mengerikan untuk membaca, apalagi memahami, berikut ini adalah verbose setara:
^ # 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 mengganti [0-9]
dengan \d
di sebagian besar ekspresi reguler implementasi (termasuk PCRE, yang paling umum). I've kiri itu sebagai [0-9]
karena saya pikir itu's mudah untuk dibaca.
Juga, di sini adalah sederhana Python script saya digunakan untuk memeriksa ini:
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) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0
Untuk angka-angka yang don't memiliki pemisah ribuan, saya suka ini sederhana, kompak regex:
\d+(\.\d{2})?|\.\d{2}
atau, tidak terbatas pada ketepatan 2:
\d+(\.\d*)?|\.\d+
Kedua pertandingan
1
100
100.
100.74
100.7
0.7
.7
.72
Dan itu doesn't pertandingan string kosong (seperti \d.?\d akan)
^[0-9]+(\.([0-9]{1,2})?)?$
Akan membuat hal-hal seperti 12.
diterima. Ini bukan apa yang umumnya diterima, namun jika dalam kasus anda perlu untuk menjadi "fleksibel", yang merupakan salah satu cara untuk pergi. Dan tentu saja [0-9]
dapat diganti dengan \
d, tapi saya kira itu lebih mudah dibaca dengan cara ini.
Jawaban utama adalah SALAH karena valids 5.
atau 5,
input
kode ini menangani itu (tapi dalam contoh saya, angka negatif yang dilarang):
/^[0-9]+([.,][0-9]{1,2})?$/;
hasil di bawah ini:
benar => "0" / benar => "0.00" / benar => "0.0" / benar => "0,00" / benar => "0,0" / benar => "1,2" benar => "1.1"/ benar => "1" / benar => "100" benar => "100.00"/ benar => "100.0" / benar => "1.11" / benar => "1,11"/ false => "-5" / false => "-0.00" / benar => "101" / false => "0.00.0" / benar => "0.000" / benar => "000.25" / false => ".25" / benar => "100.01" / benar => "100.2" / benar => "00" / false => "5." / false => "6" / benar => "82" / benar => "81,3" / benar => "7" / benar => "7.654"
Ini akan memungkinkan desimal dengan eksponensial dan upto 2 digit ,
^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$
function DecimalNumberValidation() {
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 setiap angka desimal cuaca jumlah tempat desimal atau tidak, ia akan berkata "Benar" bijak lain "Silakan masukkan hanya angka-angka dalam jumlah textbox." pesan peringatan akan muncul.
Terima kasih... :)