Bagaimana cara menyertakan angka desimal negatif dalam ekspresi reguler ini?


90

Bagaimana cara mencocokkan bilangan negatif juga dengan ekspresi reguler ini? Regex ini berfungsi dengan baik dengan nilai positif, tetapi saya ingin juga mengizinkan nilai negatif misalnya -10, -125.5 dll.

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

Terima kasih


1
@DanPuzey Apakah Anda tidak melihat Regex yang dia posting?
Nolonar


saya mencoba menambahkan [-] di awal tetapi ini tidak berhasil. saya juga mencoba kombinasi perubahan kecil
user1786107

coba ini ^ -? \ d + (\. \ d +)? $
Civa

@DanPuzey kata-kata Anda tidak menambahkan apa-apa ke diskusi dan tidak baik
Wassadamo

Jawaban:


176

Anda harus menambahkan tanda hubung opsional di awal dengan menambahkan -?( ?adalah pembilang yang berarti satu atau nol kejadian ):

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

Saya memverifikasinya di Rubular dengan nilai-nilai ini:

10.00
-10.00

dan keduanya cocok seperti yang diharapkan.


2
Anda harus menghindari titik itu, yaitu^-?[0-9]\d*(\.\d+)?$
Alex Shesterov

14
Jika ada potensi kebutuhan untuk menangkap angka-angka positif secara eksplisit (+10.00, digunakan dalam beberapa aplikasi), Anda dapat menggunakan^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

129

Beberapa contoh ekspresi reguler:

Integer Positif :

^\d+$

Integer Negatif :

^-\d+$

Integer :

^-?\d+$

Angka Positif :

^\d*\.?\d+$

Angka Negatif :

^-\d*\.?\d+$

Angka Positif atau Angka Negatif :

^-?\d*\.{0,1}\d+$

Nomor telepon :

^\+?[\d\s]{3,}$

Telepon dengan kode :

^\+?[\d\s]+\(?[\d\s]{10,}$

Tahun 1900-2099 :

^(19|20)[\d]{2,2}$

Tanggal (hh bbm tttt, hh / b / tttt, dll.):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

IP v4 :

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$

11

Saya tidak tahu mengapa Anda membutuhkan itu dulu [0-9].

Mencoba:

^-?\d*(\.\d+)?$

Memperbarui

Jika Anda ingin memastikan bahwa Anda memiliki digit di tempat satuan, gunakan

^-?\d+(\.\d+)?$

1
Mungkin hanya untuk menjamin satu digit di tempat ^-?\d+(\.\d+)?$
satuan

Jawaban paling tepat. Saya tidak berpikir [0-9] diperlukan seperti yang ditunjukkan dalam jawaban yang diterima.
UzumakiL

3

DIPERBARUI (13/08/2014): Ini adalah kode terbaik untuk bilangan positif dan negatif =)

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

Saya mencoba dengan nomor ini dan berfungsi dengan baik:

-1234454.3435
-98.99
-12.9
-12.34
-10.001
-3
-0.001
-000
-0.00
0
0.00
00000001.1
0.01
1201.0000001
1234454.3435
7638.98701

Ubah -*menjadi -?karena cocok -------------.
Toto

Saya membuat beberapa perubahan tambahan, dan sekarang berfungsi dengan baik. Harap periksa bahwa =)
Pacho Zuñiga

1

Ini akan mengizinkan karakter -atau +hanya jika diikuti oleh angka:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$

1

Ini akan memungkinkan bilangan bulat positif dan negatif

ValidationExpression = "^ -? [0-9] \ d * (\ d +)? $"


1

Saya punya beberapa percobaan tentang regex di django url, yang dibutuhkan dari angka negatif ke positif

^(?P<pid>(\-\d+|\d+))$

Mari kita fokus pada (\-\d+|\d+)bagian ini dan mengabaikan yang lain, titik koma ini |berarti OR dalam ekspresi reguler, maka nilai negatif akan cocok dengan \-\d+bagian ini , dan nilai positif menjadi ini\d+



1

Jika Anda memiliki ini val="-12XXX.0abc23"dan Anda hanya ingin mengekstrak angka desimal, dalam hal ini regex ( ^-?[0-9]\d*(\.\d+)?$) tidak akan membantu Anda mencapainya.
ini adalah kode yang tepat dengan ekspresi reguler yang benar:

var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);


0

Cukup tambahkan 0 atau 1 token:

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

Andre mengalahkan saya untuk itu, dia juga benar, tidak perlu token [0-9].
BanksySan


0
^[+-]?\d{1,18}(\.\d{1,2})?$

menerima nilai desimal positif atau negatif.


0

Ekspresi reguler untuk angka, titik desimal opsional, negatif opsional:

^-?(\d*\.)?\d+$;

berfungsi untuk bilangan bulat negatif, desimal, negatif dengan desimal


0
^(-?\d+\.)?-?\d+$

mengizinkan:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.