2012-03-18 45 views
25

Tôi cần một hàm để xóa tất cả các ký tự ngoại trừ số + ký tự: '$', '.' và ','.

Tôi làm cách nào để thực hiện việc này?

+1

Cách dễ nhất ở đây sẽ sử dụng cụm từ thông dụng – aurbano

+0

Từ cái gì? Trường nhập liệu? –

Trả lời

35
> 'worth $12,345.00 dollars'.replace(/[^0-9$.,]/g, '') 
"$12,345.00" 

Đây là câu trả lời mà bạn yêu cầu. Tôi sẽ không khuyên bạn nên nó cho giải nén tệ, vì nó có thể bị các vấn đề như thế này:

> 'A set of 12 worth between $123 and $456. A good buy.'.replace(/[^0-9$.,]/g, '') 
"12$123$456.." 

Nếu bạn muốn chỉ trích biểu hiện một hình thức tiền tệ như thế nào, bạn có thể làm:

> 'set of 12 worth between $123.00 and $45,678'.match(/\$[0-9,]+(?:\.\d\d)?/g) 
["$123.00", "$45,678"] 

Nếu quý vị cần hợp phức tạp hơn (ví dụ như bạn chỉ muốn trích xuất các giá trị đồng đô la và bỏ qua các giá trị phần trăm) bạn có thể làm một cái gì đó giống như How do you access the matched groups in a JavaScript regular expression? ví dụ:

> var regex = /\$([0-9,]+)(?:\.(\d\d))?/g; 
> while (true) { 
>  var match = regex.exec('set of 12 worth between $123.00 and $45,678'); 
>  if (match === null) 
>   break; 
>  console.log(match); 
> } 
["$123.00", "123", "00"] 
["$45,678", "45,678", undefined] 

(Vì vậy hãy cẩn thận, các đối tượng regexp javascript không phải là các đối tượng bất biến/cuối cùng, nhưng có trạng thái và có thể được sử dụng để lặp lại như đã trình bày ở trên. Do đó bạn không thể "tái sử dụng" một đối tượng regexp. Ngay cả khi vượt qua myRegex2 = RegExp(myRegex) sẽ kết hợp trạng thái; một quyết định ngôn ngữ rất kém cho người xây dựng. Xem phụ lục về cách sao chép đúng regexes trong javascript) Bạn có thể viết lại trên như một vòng lặp cho-rất kỳ lạ nếu bạn muốn:

var myString = 'set of 12 worth between $123.00 and $45,678'; 
var regex = '\$([0-9,]+)(?:\.(\d\d))?'; 

for(var match, r=RegExp(regex,'g'); match=regex.exec(myString) && match!==null;) 
    console.log(match); 

phụ lục - Tại sao bạn không thể tái sử dụng. javascript RegExp đối tượng

thiết kế ngôn ngữ Bad, thể hiện như thế nào nhà nước được tái sử dụng:

var r=/(x.)/g 
var r2 = RegExp(r) 

r.exec('xa xb xc') 
["xa", "xa"] 
r2.exec('x1 x2 x3') 
["x2", "x2"] 

Làm thế nào để sao chép đúng một regex trong javascript (bạn phải xác định nó với một string):

var regexTemplate = '(x.)' 

var r = RegExp(regexTemplate, 'g') 
var r2 = RegExp(regexTemplate, 'g') 

r.exec('xa xb xc') 
["xa", "xa"] 
r2.exec('x1 x2 x3') 
["x1", "x1"] 

Nếu bạn muốn lập trình gìn giữ lá cờ như 'g', có lẽ bạn có thể sử dụng regexTemplate = ['(x.)', 'g']; RegExp.apply(this, regexTemplate).

+0

cảm ơn. Tôi chỉ sử dụng dòng đầu tiên nhưng tất cả sẽ giúp tôi trong tương lai. – lisovaccaro

3

Nếu bạn không muốn cho phép một người nào đó gõ giá trị như vậy trong một textbox sau đó jQuery Numeric là một plugin tốt đẹp mà thực hiện chính xác những gì bạn muốn,

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