2010-03-31 36 views
50

này hoạt động:Javascript Regular Expressions - Thay thế các ký tự số

var.replace(/[^0-9]+/g, ''); 

Đó đoạn đơn giản sẽ thay thế bất cứ điều gì đó không phải là một số lượng không có gì.

Nhưng số thập phân cũng là thực. Vì vậy, tôi đang cố gắng tìm ra cách bao gồm một khoảng thời gian.

Tôi chắc chắn nó thực sự đơn giản, nhưng các thử nghiệm của tôi không hoạt động.

+0

Bạn đang tìm kiếm một số đơn lẻ hay nhiều số? I E. cho "12.3 a b5" bạn có muốn trả về "12.3 5" hoặc "12.35" hay chuỗi đầu vào đó thậm chí không thể? – tloflin

Trả lời

69

Bạn đã thoát khỏi khoảng thời gian chưa? var.replace(/[^0-9\.]+/g, '');

+0

thoát khỏi khoảng thời gian là không cần thiết, tôi tin. – Lane

4

Hãy thử điều này:

var.replace(/[^0-9\\.]+/g, ''); 
2

Hãy thử điều này:

var.replace(/[0-9]*\.?[0-9]+/g, ''); 

đó chỉ phù hợp với số thập phân hợp lệ (ví dụ: "1", "1.0", ".5" , nhưng không phải là" 1.0. 22")

+1

Thực ra, điều này khớp với B.006 hoặc blah123. Anh ta đang tìm kiếm trường hợp tiêu cực. –

+2

Ooh ... Tôi đã đọc sai câu hỏi. Ouch. – Eric

2

Nếu bạn không muốn bắt địa chỉ IP cùng với số thập phân:

var.replace(/[^0-9]+\\.?[0-9]*/g, ''); 

Mà sẽ chỉ bắt chữ số với một hoặc không có thời gian

+0

Điều này là sai. Điều này khớp với số không, theo sau là một khoảng thời gian có thể, tiếp theo là số. Người đăng muốn thay thế tất cả các số NON không có gì. –

+0

Cảm ơn. Tôi hiểu lầm câu hỏi. – dkinzer

+0

Mặc dù tôi nghĩ rằng điều này cho biết khớp với bất kỳ thứ gì bắt đầu bằng một hoặc nhiều số, theo sau là 0 hoặc 1 theo sau là 0 hoặc nhiều số. – dkinzer

8

Thay thế một cái gì đó không phải là một số là một chút phức tạp hơn so với thay thế cái gì đó một số.

Những đề xuất chỉ cần thêm dấu chấm, bỏ qua thực tế là. cũng được sử dụng như một khoảng thời gian, vì vậy:

This is a test. 0.9, 1, 2, 3 sẽ trở thành .0.9123.

Regex cụ thể trong vấn đề của bạn sẽ phụ thuộc rất nhiều vào mục đích. Nếu bạn chỉ có một số duy nhất trong chuỗi của bạn, bạn có thể làm điều này:

var.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1")

này tìm số đầu tiên, và thay thế toàn bộ chuỗi với số lượng phù hợp.

0

Làm thế nào về việc này:

var numbers = str.gsub(/[0-9]*\.?[0-9]+/, "#{0} "); 
0

ngọt inline ngắn thay thế các ký tự không phải số trong ASP.Net Textbox:

<asp:TextBox ID="txtJobNo" runat="server" class="TextBoxStyle" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" /> 

Alter phần regex như you'ld thích. Rất nhiều và rất nhiều người phàn nàn về con trỏ đi thẳng đến cùng khi sử dụng các phím mũi tên, nhưng mọi người có xu hướng đối phó với điều này mà không nhận thấy nó ví dụ, mũi tên ... mũi tên ... mũi tên ... được rồi ... backspace back space, nhập các ký tự mới.

0

đã có rất nhiều câu trả lời chính xác rồi, chỉ cần chỉ ra rằng bạn có thể cần tính đến các dấu hiệu tiêu cực. "\-" thêm câu trả lời đó vào bất kỳ câu trả lời hiện có nào để cho phép số âm.

0

Dưới đây là một vài jQuery loại lớp đầu vào tôi sử dụng:

$("input.intgr").keyup(function (e) { // Filter non-digits from input value. 
    if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, '')); 
}); 
$("input.nmbr").keyup(function (e) { // Filter non-numeric from input value. 
    var tVal=$(this).val(); 
    if (tVal!="" && isNaN(tVal)){ 
     tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, '')); 
     var raVal=tVal.split(".") 
     if(raVal.length>2) 
      tVal=raVal[0]+"."+raVal.slice(1).join(""); 
     $(this).val(tVal); 
    } 
}); 

intgr cho phép chỉ số - như các giải pháp khác ở đây.

nmbr chỉ cho phép số thập phân âm/dương. Tiêu cực phải là ký tự đầu tiên (bạn có thể thêm dấu "+" để bộ lọc nếu cần), dải -3.6.23.333--3.623333

Tôi đặt nmbr lên bởi vì tôi đã mệt mỏi của cố gắng tìm cách để giữ chỉ 1 thập phân và âm ở vị trí thứ nhất

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