Apa ekspresi reguler untuk desimal dengan ketelitian 2?
Contoh yang valid :
123.12
2
56754
92929292929292.12
0.21
3.1
Contoh tidak valid:
12.1232
2.23332
e666.76
Titik desimal mungkin opsional, dan bilangan bulat juga dapat dimasukkan.
Apa ekspresi reguler untuk desimal dengan ketelitian 2?
Contoh yang valid :
123.12
2
56754
92929292929292.12
0.21
3.1
Contoh tidak valid:
12.1232
2.23332
e666.76
Titik desimal mungkin opsional, dan bilangan bulat juga dapat dimasukkan.
Jawaban:
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})$
Membungkus bagian pecahan ()?
untuk membuatnya opsional. Perlu diketahui bahwa ini mengecualikan formulir seperti 12.
Termasuk yang akan lebih seperti ^\d+\\.?\d{0,2}$
.
Gunakan ^\d{1,6}(\.\d{1,2})?$
untuk menghentikan pengulangan dan memberikan batasan untuk seluruh bagian dari nilai desimal.
-?
, 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".
^[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 \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:
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
+
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, keduanya 1z23
dan 1.23
mungkin dianggap sah jika Anda tidak menghindarinya
Untuk memasukkan tanda minus opsional dan untuk melarang angka seperti 015
(yang dapat disalahartikan sebagai angka oktal) tulis:
-?(0|([1-9]\d*))(\.\d+)?
Untuk angka yang tidak memiliki pemisah ribuan, saya suka regex sederhana dan ringkas ini:
\d+(\.\d{2})?|\.\d{2}
atau, tidak terbatas pada ketelitian 2:
\d+(\.\d*)?|\.\d+
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)
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
Jawaban utama SALAH karena valid 5.
atau 5,
input
kode ini menanganinya (tetapi dalam contoh saya angka negatif dilarang):
/^[0-9]+([.,][0-9]{1,2})?$/;
hasilnya di bawah ini:
true => "0" / true => "0,00" / true => "0,0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1.11" / true => "1,11" / false => "-5" / false => "-0.00" / true => "101" / false => "0.00.0" / true => "0.000" / true => "000.25" / false => ".25" / true => "100.01" / true => "100.2" / true => "00" / false => "5." / false => "6," / true => "82" / true => "81,3" / true => "
Tidak akan Anda perlu mengambil e
di e666.76
dalam akun?
Dengan
(e|0-9)\d*\d.\d{1,2)
Ini bekerja dengan saya:
(-?[0-9]+(\.[0-9]+)?)
Grup 1 adalah angka float Anda dan grup 2 adalah fraksi saja.
Ini akan memungkinkan desimal dengan eksponensial dan hingga 2 digit,
^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$
1.2e-10
([0-9]+)?
lebih baik ditulis \d*
. Sekarang tidak cocok 10e3
. Dan OP ingin mencocokkan hingga 2 digit.
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 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 ... :)