2010-03-22 39 views
6

Tôi đang sử dụng regexp sau đây để xác nhận con số trong tập tin javascript của tôi:Members javascript số thập phân

var valid = (val.match(/^\d+$/)); 

Nó hoạt động tốt cho số nguyên như 100, 200, vv, tuy nhiên cho những thứ như 1,44, 4,11, v.v., nó trả về false. Làm thế nào tôi có thể thay đổi nó để các số có số thập phân cũng được chấp nhận?

Trả lời

27
var valid = (val.match(/^\d+(?:\.\d+)?$/)); 

Matches:

1 : yes 
1.2: yes 
-1.2: no 
+1.2: no 
    .2: no 
1. : no 

var valid = (val.match(/^-?\d+(?:\.\d+)?$/)); 

Matches:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: no 
    .2: no 
1. : no 

var valid = (val.match(/^[-+]?\d+(?:\.\d+)?$/)); 

Matches:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: no 
1. : no 

var valid = (val.match(/^[-+]?(?:\d*\.?\d+$/)); 

Matches:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: yes 
1. : no 

var valid = (val.match(/^[-+]?(?:\d+\.?\d*|\.\d+)$/)); 

Matches:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: yes 
1. : yes 
3

thử điều này:

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

"4." về mặt kỹ thuật là số thập phân hợp lệ nhưng regex này sẽ không khớp với số đó. Bạn nên tạo các chữ số '\ d +' trong nhóm tùy chọn. –

0

Nếu bạn muốn chấp nhận thập phân (kể cả < 1) và số nguyên, với tùy chọn + hoặc - dấu hiệu, bạn có thể sử dụng hợp lệ = Số (val).

Hoặc một regexp:

valid=/^[+\-]?(\.\d+|\d+(\.\d+)?)$/.test(val); 
3

isNaN có vẻ như một giải pháp tốt hơn cho tôi.

> isNaN('1') 
false 
> isNaN('1a') 
true 
> isNaN('1.') 
false 
> isNaN('1.00') 
false 
> isNaN('1.03') 
false 
> isNaN('1.03a') 
true 
> isNaN('1.03.0') 
true 
+0

hoạt động hoàn toàn tốt với tích cực/tiêu cực quá – seanmonstar

0

! IsNaN (văn bản) & & parseFloat (văn bản) == văn bản

Các vấn đề liên quan