2012-09-09 24 views

Trả lời

25

Bạn có thể sử dụng regex

myString.replace(/[^\w\s!?]/g,''); 

này sẽ thay thế tất cả mọi thứ nhưng một nhân vật từ, không gian, dấu chấm than, hoặc câu hỏi.

Character Class: \w là viết tắt của "ký tự từ", thường là [A-Za-z0-9_]. Lưu ý sự bao gồm dấu gạch dưới và chữ số.

\s là viết tắt của "ký tự khoảng trống". Nó bao gồm [ \t\r\n].

Nếu bạn không muốn gạch dưới, bạn có thể chỉ sử dụng [A-Za-z0-9].

myString.replace(/[^A-Za-z0-9\s!?]/g,''); 

Đối với ký tự unicode, bạn có thể thêm một cái gì đó như \u0000-\u0080 vào biểu thức. Điều đó sẽ loại trừ tất cả các ký tự trong phạm vi unicode đó. Bạn sẽ phải chỉ định phạm vi cho các ký tự mà bạn không muốn xóa. Bạn có thể xem tất cả các mã trên Unicode Map. Chỉ cần thêm các ký tự bạn muốn giữ hoặc một loạt các ký tự.

Ví dụ:

myString.replace(/[^A-Za-z0-9\s!?\u0000-\u0080\u0082]/g,''); 

Điều này sẽ cho phép tất cả các nhân vật được đề cập trước đây, phạm vi từ \u0000-\u0080\u0082. Nó sẽ xóa \u0081.

+0

Chỉ là một suy nghĩ, nhưng điều đó cũng không để lại trong nhân vật gạch dưới? –

+0

và dấu chấm than? nó loại bỏ các chữ cái quốc tế ... –

+0

@tomaszs Tôi đã cập nhật câu trả lời để giải quyết vấn đề đó. – sachleen

1

Bạn có thể thử với một biểu thức chính quy như: var cleaned = someString.replace(/[^a-zA-Z0-9! ]+/g, "");

+0

Tôi nghĩ bạn đã bỏ cờ 'g' khỏi regex. – jfriend00

+0

Ops ... Cảm ơn, tôi đã chỉnh sửa câu trả lời. – rcdmk

3

Cả hai câu trả lời được đăng cho đến nay đều để lại dấu chấm hỏi. Tôi sẽ bình luận về họ, nhưng chưa có đủ đại diện.

David đúng, regex của sachleen sẽ để lại dấu gạch dưới. regex của rcdmk, được sửa đổi như sau, sẽ thực hiện thủ thuật, mặc dù nếu bạn quan tâm đến các nhân vật quốc tế, mọi thứ có thể phức tạp hơn nhiều.

var result = text.replace(/[^a-zA-Z0-9\s!?]+/g, ''); 

Điều này sẽ để lại các dòng và tab mới cũng như khoảng trống.Nếu bạn muốn thoát khỏi dòng mới và các tab là tốt, thay đổi nó để:

var result = text.replace(/[^a-zA-Z0-9 !?]+/g, ''); 
+0

Và * bây giờ *, bạn * có thể * để lại nhận xét! =) –

+0

lol, cảm ơn! :) – Kelvin

+0

Hãy nhớ rằng, mặc dù: với sức mạnh tuyệt vời đến tuyệt vời ... * ooh, sáng bóng! * –

2
text = "A(B){C};:a.b*!c??!1<>[email protected]#3" 
result = text.replace(/[^a-zA-Z0-9]/g, '') 

nên trở ABCabc123

Đầu tiên, chúng ta định nghĩa văn bản như A B C a b c 1 2 3 nhưng với các nhân vật ngẫu nhiên bộ số result là:

text.replace(...) nơi tham số là:

/.../g, /.../: ^ có nghĩa là đảo ngược; không để loại bỏ các chữ cái đó là:

a-z (chữ thường), A-Z (chữ hoa) và 0-9 (chữ số)

g nghĩa toàn cầu, để loại bỏ tất cả trận đấu không chỉ là người đầu tiên phù hợp với

Tham số thứ hai là ký tự thay thế, chúng tôi se t nó vào một chuỗi rỗng để nó chỉ giữ chuỗi được chỉ định. nếu được chỉ định, nó sẽ trở lại này: "A B C a b c 1 2 3"