Làm cách nào để đưa các số thập phân âm vào biểu thức chính quy này?


89

Làm cách nào để đối sánh số âm với biểu thức chính quy này? Regex này hoạt động tốt với các giá trị dương, nhưng tôi muốn nó cũng cho phép các giá trị âm, ví dụ -10, -125,5, v.v.

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

Cảm ơn


1
@DanPuzey Bạn không thấy Regex mà anh ấy đã đăng?
Nolonar


Tôi đã thử thêm [-] vào đầu nhưng điều này không hoạt động. tôi cũng đã cố gắng kết hợp các thay đổi nhỏ
user1786107

hãy thử cái này ^ -? \ d + (\. \ d +)? $
Civa

@DanPuzey lời nói của bạn không có gì để thảo luận và không tử tế
Wassadamo

Câu trả lời:


173

Bạn nên thêm dấu gạch ngang tùy chọn ở đầu bằng cách thêm -?( ?là một bộ định lượng có nghĩa là một hoặc không xuất hiện ):

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

Tôi đã xác minh nó trong Rubular với các giá trị sau:

10.00
-10.00

và cả hai đều phù hợp như mong đợi.


2
bạn nên thoát khỏi dấu chấm, ví dụ^-?[0-9]\d*(\.\d+)?$
Alex Shesterov

14
Nếu có một tiềm năng cần phải nắm bắt số rõ ràng possitive (10,00, được sử dụng trong một số ứng dụng), bạn có thể sử dụng^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

127

Một số ví dụ về Biểu thức chính quy:

Số nguyên dương :

^\d+$

Số nguyên phủ định :

^-\d+$

Số nguyên :

^-?\d+$

Số dương :

^\d*\.?\d+$

Số âm :

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

Số dương hoặc Số âm :

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

Số điện thoại :

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

Điện thoại có mã :

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

Năm 1900-2099 :

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

Ngày (dd mm yyyy, d / m / yyyy, v.v.):

^([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

Tôi không biết tại sao bạn cần điều đó đầu tiên [0-9].

Thử:

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

Cập nhật

Nếu bạn muốn chắc chắn rằng bạn sẽ có một chữ số ở vị trí hàng đơn vị, thì hãy sử dụng

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

1
Có lẽ chỉ để đảm bảo một chữ số ở vị trí hàng đơn vị, ^-?\d+(\.\d+)?$sẽ hoạt động nếu đúng như vậy
Cemafor vào

Câu trả lời phù hợp nhất. Tôi không nghĩ [0-9] là cần thiết như được hiển thị trong câu trả lời được chấp nhận.
UzumakiL

3

CẬP NHẬT (13/08/2014): Đây là mã tốt nhất cho số dương và số âm =)

(^-?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}

Tôi đã thử với những con số này và hoạt động tốt:

-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

Thay đổi -*thành -?vì nó phù hợp -------------.
Toto

Tôi đã tạo một số thay đổi bổ sung và bây giờ hoạt động tốt. Vui lòng kiểm tra điều đó =)
Pacho Zuñiga

1

Điều này sẽ chỉ cho phép một -hoặc +ký tự khi được theo sau bởi một số:

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

1

Điều này sẽ cho phép cả số nguyên dương và số nguyên âm

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


1

Tôi có một số thử nghiệm về regex trong url django, yêu cầu từ số âm sang số dương

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

Chúng ta hãy tập trung vào (\-\d+|\d+)phần này và bỏ qua phần khác, dấu chấm phẩy này |có nghĩa là HOẶC trong regex, sau đó giá trị âm sẽ khớp với \-\d+phần này và giá trị dương trong phần này\d+



0

Chỉ cần thêm 0 hoặc 1 mã thông báo:

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

Andre đã đánh bại tôi, anh ấy cũng đúng, không cần mã thông báo [0-9].
BanksySan


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

chấp nhận các giá trị thập phân dương hoặc âm.


0

Biểu thức chính quy cho số, dấu thập phân tùy chọn, phủ định tùy chọn:

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

hoạt động với số nguyên âm, số thập phân, số âm với số thập phân


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

cho phép:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234

0

Nếu bạn có điều này val="-12XXX.0abc23"và bạn chỉ muốn trích xuất số thập phân, trong trường hợp này, hàm regex ( ^-?[0-9]\d*(\.\d+)?$) sẽ không giúp bạn đạt được nó.
đây là mã thích hợp với regex phát hiện chính xác:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.