2009-08-06 41 views
8

JS của tôi lưu một số dữ liệu chuỗi vào JSON bằng cách sử dụng "stringify()", nhưng quan sát chuỗi JSON đã xuất ra, tôi thấy rất nhiều ký tự lạ (ngoài keyspace), chẳng hạn như NULL và các ký tự không hợp lệ khác. Bây giờ tôi không có một danh sách các ký tự "xấu" này sao cho tôi có thể tách chúng ra khỏi dữ liệu chuỗi của tôi?Làm cách nào để tách các ký tự không hợp lệ khỏi chuỗi trong JS?

+1

Nguyên nhân gây ra những ký tự lạ đó? Nó sẽ là tốt hơn để điều tra nguyên nhân gốc rễ và sửa chữa nó ở đó. –

Trả lời

8

Sẽ thật tuyệt nếu có RegEx đơn giản cho điều đó, nhưng tôi không nghĩ là có. Từ những gì tôi hiểu, bạn vẫn muốn cho phép các ký tự như% $ # @, v.v., nhưng muốn không cho phép các ký tự kỳ quặc khác như các tab và các giá trị rỗng. Nếu điều này đúng, tôi tin rằng cách dễ nhất là lặp lại từng ký tự và đánh giá mã char ...

function stripCrap(val) { 
    var result = ''; 

    for(var i = 0, l = val.length; i < l; i++) { 
    var s = val[i]; 
    if(String.toCharCode(s) > 31) 
     result += s; 
    } 

    return result; 
} 

Nếu bạn thực sự muốn sử dụng RegEx, phương pháp tiếp cận danh sách trắng có vẻ cần thiết. Điều này sẽ cho phép tất cả các số, chữ cái và khoảng trắng ...

val = val.replace(/[^a-z 0-9]+/gi,''); 
+0

cảm ơn rất nhiều vì đề xuất danh sách trắng. Một giải pháp tuyệt vời cho vấn đề này – Mansiemans

+0

Tôi nhận được lỗi: 'TypeError: Đối tượng chức năng String() {[native code]} không có phương pháp 'toCharCode'' trong chrome – nnyby

+0

Tôi nhận nó hoạt động, chỉ cần thay đổi dòng đó để: 'if (s.charCodeAt (0)> 31) {' – nnyby

2

Nếu bạn có một danh sách các ký tự "tốt" bạn có thể tạo một regex mà phù hợp với bất kỳ ký tự không trong danh sách của bạn, và dải bất cứ điều gì nó phù hợp - ví dụ, regex sau phù hợp với bất cứ điều gì không các chữ cái "a", "q" hoặc "z":

/[^aqz]+/ig 
Các vấn đề liên quan