2009-07-23 32 views
44

Tôi đang cố gắng tìm tất cả các chữ cái và dấu gạch ngang và ký hiệu đô la và xóa chúng khỏi hộp văn bản.Làm cách nào để xóa chữ cái và dấu gạch ngang và ký hiệu đô la trong chuỗi bằng cụm từ thông dụng?

function numbersOnly() 
{ 
    if ($('.sumit').val().indexOf([A-Za-z-$])) { 
     $('.sumit').val().replace([A-Za-z-$], ""); 
    } 
} 

Đó là những gì tôi có và tôi khá chắc là sai. Tôi không quá tuyệt vời với các biểu thức thông thường, nhưng tôi đang cố gắng tìm hiểu chúng. Có ai muốn giúp tôi và bắt tôi hoàn thành chức năng này không?

Vì vậy, bạn đã có các yếu tố đầu vào.

<div class="numInputRight"><input type="text" class="sumit" name="sumAmount1"></div> 
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount2"></div> 
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount3"></div> 

Sau đó, bạn đã có những chức năng:

numbersOnly = function() 
{ 
    $('.sumit').val().replace(/[A-Za-z$-]/g, ""); 
    alert($('.sumit').val()); 
    return false; 
} 

Tôi cảnh báo để xác định nếu thay thế đang làm việc. Nó không phải.

+0

Không có cách nào trong số này hoạt động trung thực. Tôi sẽ cập nhật cho bạn những gì tôi có. Tôi cũng đang cố gắng thực hiện việc này với 3 hộp nhập. –

+0

Bạn nên thay đổi bộ chọn từ .subit thành input.sumit - MUCH hiệu suất tốt hơn. –

Trả lời

26

Mark hiện nó cho tất cả phi chữ số. Nếu bạn chỉ muốn đưa ra chữ cái, dấu gạch ngang và $, (nhưng số thập phân để lại, ví dụ), sửa đổi này để ban đầu của bạn nên làm điều đó:

$('.sumit').val().replace(/[A-Za-z$-]/g, ""); 

(Và cá nhân tôi thích câu trả lời cập nhật của Mark với cùng lý do anh ta làm, bạn nắm bắt mọi thứ bạn không thể dự đoán theo cách đó.)

Đối với câu hỏi được cập nhật của bạn, lý do giá trị không thay đổi là vì val() trả về một chuỗi mới. Nó sẽ không thay đổi giá trị thực tế. Để thực hiện điều đó, hãy thử:

$('.sumit').each(function() { 
    $(this).val($(this).val().replace(/[A-Za-z$-]/g, "")); 
}); 
alert($('.sumit').val()); 

Tôi cũng đã thực hiện cuộc gọi vào mỗi() để mọi thành phần sẽ được thực hiện riêng lẻ.

+0

Điều này đã hiệu quả! Tôi vẫn muốn có thể nhìn thấy một cảnh báo cho mỗi hộp đầu vào cá nhân mặc dù. Tôi chỉ trả về một cảnh báo cho hộp đầu vào đầu tiên. Mặc dù .. Với .each(), nó sẽ trả về tất cả các giá trị. Không phải là một thỏa thuận lớn, tôi có thể làm việc với điều này. Cảm ơn. –

+0

@Michael: Chỉ cần đặt điều này bên trong mỗi: cảnh báo ($ (this) .val()); –

+0

Một regex tốt hơn cho điều này sẽ là '/ [A-Za-z $ -. \/\\\ [\] = _ @! #^<>;"]/G' – jnrcorp

149

này nên làm điều đó

$('.sumit').val().replace(/[^\d.]/g, ""); 

Các [^] là một lớp nhân vật phủ nhận vì nó sẽ phù hợp với tất cả các nhân vật trừ những liệt kê trong lớp nhân vật.

Trong trường hợp này, lớp ký tự của chúng tôi là \d (là số 0-9) và dấu chấm (để cho phép số thập phân).

Tôi thích phương pháp này vì nó sẽ bắt được bất kỳ điều gì không phải là số thay vì phải lo lắng về việc liệt kê rõ ràng các ký tự không phải số mà tôi không muốn.

Nếu bạn thực sự chỉ muốn loại trừ chữ cái, $ và -, thì câu trả lời là Sean's là cách tốt hơn.

+4

Nếu thay thế này được thực hiện thường xuyên hoặc trên các chuỗi dài, có thể đáng giá thêm '+' sau nhóm ký tự để mẫu không phải thực hiện thay thế một lần cho mỗi ký tự khi có một chuỗi số không nhân vật. Trong trường hợp này, tôi nghi ngờ sẽ có bất kỳ hiệu suất đáng chú ý mặc dù, nhưng đó là thực hành tốt nếu không có gì khác. '=)' – Blixt

+4

Ngoài ra, tôi tin rằng việc sử dụng \ D sẽ hoạt động. \ D được định nghĩa gần như là^\ d – CoderTao

+1

tại sao bạn cần '.' ở đây trong' [^ \ d.] '? không nên phủ nhận bất kỳ nhân vật nào? nó không, vì nó hoạt động, nhưng tại sao? – Claudiu

0

Hãy thử một cái gì đó như thế này:

function numbersOnly() 
{ 
    $('.sumit').val().replace(/[\w-$]/g, ""); 
} 
+1

Trên thực tế, \ w là [a-ZA-Z0-9_] trong javascript, vì vậy bạn có thể không muốn sử dụng nó. – Sean

5
$('.sumit').val().replace(/\D/g, ""); 

Thay thế tất cả các giá trị không phải là số từ giá trị Djuzz

1

này đã làm việc cho tôi:

$('.sumit').val().replace(/[^\d]/g, ""); 

Tôi cố gắng trả lời của Mike với vốn \ D thay vì phủ nhận một \ d đầu tiên mà đối với một số lý do không xóa dấu ngoặc đơn và dấu chấm câu khác cho tôi. Phủ nhận \ d hoạt động hoàn hảo.

Nếu bạn muốn giữ số thập phân, có thể đặt dấu chấm và các ký hiệu khác trong dấu ngoặc vuông.

PS Môi trường mà tôi đã thử nghiệm là Titanium SDK.

7

Tôi thực sự thích câu trả lời của Mark. Tuy nhiên, tùy thuộc vào ngôn ngữ lập trình của bạn (và công cụ RegEx) \d khớp với các ký tự như ४ hoặc ৮, là UTF-8 digits.

Vì vậy, nếu bạn chỉ muốn chữ số từ 0 đến 9, sử dụng [^0-9.]:

$('.sumit').val().replace(/[^0-9.]/g, ""); 

này thậm chí còn nhanh hơn nếu cơ RegEx của bạn là UTF-8 biết. Một ví dụ Ngôn ngữ, nơi áp dụng điều này là python3 (http://docs.python.org/3/library/re.html - tìm kiếm "\ d"). Tuy nhiên, ECMA Standard nói rằng đối với JavaScript \d bằng [0-9].

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