Sederhana ekspresi reguler untuk desimal dengan presisi 2

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.

Mengomentari pertanyaan (2)
Larutan

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})$

Ditambahkan

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}$.

Ditambahkan

Gunakan ^\d{1,6}(\.\d{1,2})?$ untuk menghentikan pengulangan dan memberikan pembatasan kepada seluruh bagian dari nilai desimal.

Komentar (17)
^[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
Komentar (7)

Termasuk opsional tanda minus dan untuk melarang nomor seperti 015 (yang dapat keliru untuk oktal bilangan) menulis:

-?(0|([1-9]\d*))(\.\d+)?
Komentar (2)

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)

Komentar (1)

Saya menggunakan ini selama satu 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:
.25
0.25
10.25
+0.25

doesn't lulus:
-.25
01.25
1.
1.256

Komentar (1)
^[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.

Komentar (0)

Coba ini

 (\\+|-)?([0-9]+(\\.[0-9]+))

Ini akan memungkinkan positif dan negatif tanda-tanda juga.

Komentar (0)

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"

Komentar (0)

Pada umumnya, yaitu terbatas desimal:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$.

Komentar (0)
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
Komentar (0)

Ini bekerja dengan saya:

(-?[0-9]+(\.[0-9]+)?)

Kelompok 1 apakah anda float jumlah dan group 2 adalah sebagian kecil saja.

Komentar (0)

Saya mencoba yang satu dengan proyek saya. Hal ini memungkinkan angka dengan + | - tanda-tanda juga.

/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/
Komentar (0)

Won't anda perlu untuk mengambil e di e666.76 ke akun?

Dengan

(e|0-9)\d*\d.\d{1,2)
Komentar (3)

menambahkan jawaban saya juga, seseorang mungkin menemukan itu berguna atau mungkin benar milikku juga.

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}

alert(getInteger('-11.11'));
Komentar (1)

Chrome 56 tidak menerima jenis pola (Chrome 56 accpeting 11.11. tambahan .) dengan jenis nomor, menggunakan jenis teks sebagai kemajuan.

<input type="text" ng-pola="/^[0-9]+(\.[0-9]{1,2})?$/" />
Komentar (0)

Ini akan memungkinkan desimal dengan eksponensial dan upto 2 digit ,

^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$

Demo

Komentar (3)
 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... :)

Komentar (0)