Loại bỏ ký tự đặc biệt trong javascript

Tôi muốn một RegExp sẽ xóa tất cả các ký tự đặc biệt khỏi một chuỗi. Tôi đang thử một cái gì đó như thế này nhưng nó không hoạt động trong IE7, mặc dù nó hoạt động trong Firefox.

var specialChars = "!@#$^&%*[]+=-[]\/{}|:?,.";

for [var i = 0; i < specialChars.length; i++] {
  stringToReplace = stringToReplace.replace[new RegExp["\\" + specialChars[i], "gi"], ""];
}

Mô tả chi tiết về RegExp cũng sẽ hữu ích.

  • javascript
  • regex
  • special-characters

262 hữu ích 5 bình luận 528k xem chia sẻ

answer

670

var desired = stringToReplace.replace[/[^\w\s]/gi, '']

Như đã đề cập trong các nhận xét, việc này sẽ dễ dàng hơn với tư cách là một danh sách trắng - hãy thay thế các ký tự không có trong danh sách an toàn của bạn.

Ký tự dấu mũ [ ^] là phủ định của tập hợp [...], ginói toàn cục và không phân biệt chữ hoa chữ thường [cái sau hơi thừa nhưng tôi muốn đề cập đến nó] và danh sách an toàn trong ví dụ này là chữ số, ký tự từ, dấu gạch dưới [ \w] và khoảng trắng [ \s].

670 hữu ích 5 bình luận chia sẻ

answer

125

Lưu ý rằng nếu bạn vẫn muốn loại trừ một tập hợp, bao gồm những thứ như dấu gạch chéo và các ký tự đặc biệt, bạn có thể làm như sau:

var outString = sourceString.replace[/[`~!@#$%^&*[]_|+\-=?;:'",.\{\}\[\]\\\/]/gi, ''];

đặc biệt lưu ý rằng để bao gồm cả ký tự "dấu trừ", bạn cần phải loại bỏ nó bằng một dấu gạch chéo ngược như nhóm sau. nếu bạn không, nó cũng sẽ chọn 0-9 có thể là không mong muốn.

125 hữu ích 3 bình luận chia sẻ

answer

22

Javascript thuần regex không xử lý các chữ cái Unicode .

Không sử dụng [^\w\s], điều này sẽ loại bỏ các chữ cái có dấu [như àèéìòù], chưa kể đến Cyrillic hoặc Trung Quốc, các chữ cái đến từ các ngôn ngữ như vậy sẽ bị loại bỏ hoàn toàn.

Bạn thực sự không muốn xóa những chữ cái này cùng với tất cả các ký tự đặc biệt. Bạn có hai cơ hội:

  • Thêm vào regex của bạn tất cả các ký tự đặc biệt mà bạn không muốn loại bỏ,
    ví dụ: [^èéòàùì\w\s].
  • Hãy xem xregexp.com . XRegExp thêm hỗ trợ cơ sở cho khớp Unicode thông qua \p{...}cú pháp.

var str = "Їжак::: résd,$%& adùf"
var search = XRegExp['[[^?\\pL ]+]'];
var res = XRegExp.replace[str, search, '',"all"];

console.log[res]; // returns "Їжак::: resd,adf"
console.log[str.replace[/[^\w\s]/gi, ''] ]; // returns " rsd adf"
console.log[str.replace[/[^\wèéòàùì\s]/gi, ''] ]; // returns " résd adùf"

22 hữu ích 3 bình luận chia sẻ

answer

8

Giải pháp đầu tiên không hoạt động đối với bất kỳ bảng chữ cái UTF-8 nào. [Nó sẽ cắt văn bản chẳng hạn như Їжак]. Tôi đã quản lý để tạo một hàm không sử dụng RegExp và sử dụng hỗ trợ UTF-8 tốt trong công cụ JavaScript. Ý tưởng rất đơn giản nếu một biểu tượng bằng nhau ở chữ hoa và chữ thường thì nó là một ký tự đặc biệt. Ngoại lệ duy nhất được thực hiện cho khoảng trắng.

function removeSpecials[str] {
    var lower = str.toLowerCase[];
    var upper = str.toUpperCase[];

    var res = "";
    for[var i=0; i

Bài Viết Liên Quan

Chủ Đề