2012-05-03 45 views
15

Tôi đã gặp lỗi trong ứng dụng web của mình mà tôi không chắc chắn cách khắc phục.Xóa một dấu gạch ngang dài khỏi chuỗi trong JavaScript?

Hộp văn bản gửi cho tôi dấu gạch ngang dài như một phần nội dung của chúng (bạn biết đấy, dấu gạch ngang dài đặc biệt mà MS Word tự động chèn đôi khi). Tuy nhiên, tôi không thể tìm cách thay thế nó; vì nếu tôi cố gắng sao chép ký tự đó và đặt nó vào một câu lệnh str.replace của JavaScript, nó không hiển thị đúng và nó phá vỡ tập lệnh.

Làm cách nào để khắc phục sự cố này?

Nhân vật cụ thể đang giết nó là -.

Ngoài ra, nếu nó giúp, tôi chuyển giá trị dưới dạng tham số GET và sau đó mã hóa nó trong XML và gửi nó đến máy chủ.

+1

Điều đó rất lạ. Bạn có thể đăng một số mã để chúng tôi có thể xem các ký tự có thể xuất hiện như thế nào ngay từ đầu không? – Nadh

+0

Thứ gì đó như 'str = str.replace ('&ldash;', '')'? –

Trả lời

30

Mã này có thể giúp:

text = text.replace(/\u2013|\u2014/g, "-"); 

Nó thay thế tất cả– (-) và — (-) biểu tượng với dấu gạch ngang đơn giản (-).

DEMO:http://jsfiddle.net/F953H/

+0

đơn giản hơn: '/ \ u2013 | \ u2014/g' ;-) –

+0

Tuyệt vời - đã hiệu quả. Cảm ơn! – cd6

3

nhân vật Đó là gọi một Em Dash. Bạn có thể thay thế nó như vậy:

str.replace('\u2014', '');​​​​​​​​​​ 

Dưới đây là một ví dụ Fiddle: http://jsfiddle.net/x67Ph/

Các \u2014 được gọi là một unicode escape sequence. Chúng cho phép chỉ định một ký tự unicode theo mã của nó. 2014 xảy ra là Em Dash.

1

Có ba dài ish dấu gạch ngang unicode bạn cần phải lo lắng về việc: http://en.wikipedia.org/wiki/Dash

Bạn có thể thay thế các ký tự unicode trực tiếp bằng công thoát unicode:

'—my string'.replace(/[\u2012\u2013\u2014\u2015]/g, '') 
+0

Mã này sẽ chỉ thay thế lần xuất hiện đầu tiên. Để thay thế tất cả các lần xuất hiện, bạn cần một regex với cờ toàn cục: '/ regex/g' –

+0

Đã cho phép bắn, nhưng không có hiệu lực - dấu - vẫn xuất hiện và javascript không bắt được nó. – cd6

+0

Chỉ cần cập nhật mã của tôi để sử dụng regex đầy đủ. Hãy dùng thử ngay bây giờ. –

2

Có thể có nhiều nhân vật hành xử như thế này và bạn có thể muốn sử dụng lại chúng sau html. Một cách chung chung hơn để đối phó với nó có thể là để thay thế tất cả 'ký tự mở rộng' với tương đương mã hóa html của chúng. Bạn có thể làm điều đó Như sau:

[yourstring].replace(/[\u0080-\uC350]/g, 
         function(a) { 
         return '&#'+a.charCodeAt(0)+';'; 
         } 
); 
Các vấn đề liên quan