Hướng dẫn replace unicode characters in javascript - thay thế các ký tự unicode trong javascript

11

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi cần thay thế các ký tự Unicode được xác định trên đây

Tôi đã có được điều này cho đến nay nhưng dường như nó sẽ loại bỏ tất cả không gian bao gồm cả các vũ trụ tiêu chuẩn:

var str = "Hello this is a test  of the site"; 
str= str.replace(/[ \u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'')

Kết quả - Hellothisisatestofthesite

Tôi chỉ muốn xóa ký tự Unicode là U+2003 giữa 'Kiểm tra' và 'của' trong chuỗi.

Hướng dẫn replace unicode characters in javascript - thay thế các ký tự unicode trong javascript

Bojangles

97.3K48 Huy hiệu vàng170 Huy hiệu bạc205 Huy hiệu đồng48 gold badges170 silver badges205 bronze badges

Đã hỏi ngày 7 tháng 5 năm 2013 lúc 10:19May 7, 2013 at 10:19

Xóa không gian thông thường mà bạn có đầu tiên trong mẫu:

 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');

Đã trả lời ngày 7 tháng 5 năm 2013 lúc 10:21May 7, 2013 at 10:21

GuffaguffaGuffa

674K108 Huy hiệu vàng722 Huy hiệu bạc995 Huy hiệu Đồng108 gold badges722 silver badges995 bronze badges

3

thử cái này:

var str = "Hello this is a test  of the site";
str= str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'')

Giống như bạn đã làm, nhưng với '' (không gian thông thường)

Đã trả lời ngày 7 tháng 5 năm 2013 lúc 10:21May 7, 2013 at 10:21

Hướng dẫn replace unicode characters in javascript - thay thế các ký tự unicode trong javascript

GuffaguffaKuf

674K108 Huy hiệu vàng722 Huy hiệu bạc995 Huy hiệu Đồng6 gold badges64 silver badges89 bronze badges

thử cái này:

str = str.replace(/(?! )\s/g,'');

Giống như bạn đã làm, nhưng với '' (không gian thông thường)

Đã trả lời ngày 7 tháng 5 năm 2013 lúc 10:21May 7, 2013 at 10:21

Guffaguffaelclanrs

674K108 Huy hiệu vàng722 Huy hiệu bạc995 Huy hiệu Đồng21 gold badges132 silver badges169 bronze badges

1

thử cái này:

str= str.replace(/\s+/g,' ') ;

Giống như bạn đã làm, nhưng với '' (không gian thông thường)Nov 20, 2013 at 9:50

user1251840user1251840user1251840

Kufkuf5 silver badges8 bronze badges

0

16.8k6 Huy hiệu vàng64 Huy hiệu bạc89 Huy hiệu Đồng

 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');
2

Tôi nghĩ rằng bạn có thể đơn giản hóa, thử điều này:

Bản demo: http://jsbin.com/acexun/2/editApr 25 at 12:18

Hướng dẫn replace unicode characters in javascript - thay thế các ký tự unicode trong javascript

ElclanrselclanrsWill Hanley

91K21 Huy hiệu vàng132 Huy hiệu bạc169 Huy hiệu đồng1 silver badge14 bronze badges

Loại bỏ dấu câu trong JavaScript là một nhiệm vụ tương đối dễ dàng, nhưng loại bỏ các điểm nhấn, chỉ còn lại các chữ cái khó khăn hơn một chút. Bất kể tình huống nào, tôi có dưới một số chức năng tối giản có thể được sử dụng cho cả hai trường hợp.

Cách xóa các điểm nhấn trong JavaScript

Để loại bỏ các điểm nhấn và cedilla khỏi một chuỗi và trả về cùng một chuỗi mà không có các điểm nhấn, chúng ta có thể sử dụng phương thức chuỗi.prototype.normize của ES6, theo sau là chuỗi.prototype.replace:String.prototype.normalize method, followed by a String.prototype.replace:

const str = 'ÁÉÍÓÚáéíóúâêîôûàèìòùÇç';
const parsed = str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
console.log(parsed);

Giải trình

Phương thức Normalize đã được giới thiệu trong phiên bản ES6 của JavaScript vào năm 2015. Nó phục vụ để chuyển đổi một chuỗi thành định dạng Unicode tiêu chuẩn của nó. Trong trường hợp này, chúng tôi sử dụng tham số NFD có thể tách các điểm nhấn khỏi các chữ cái và trả về mã unicode của chúng.

Để hiểu rõ hơn về cách chuyển đổi này thành Unicode hoạt động, xem bên dưới:

// String Á in UTF-18 has 1 digit
'Á'.length; // 1

// String Á in Unicode has 2 digits: \u0041\u0301
'Á'.normalize('NFD').length; // 2

// If we try to represent Unicode, we'll obtain the following result
console.log('\u0041\u0301'); // Á

Sau đó, phương pháp thay thế tất cả các sự xuất hiện của các ký tự điều chỉnh, kết hợp chúng theo trình tự Unicode \ U0300 - \ U036F, một lợi thế khác của ES6 đã được thêm vào để cho phép các phạm vi Unicode trong Regex.

Xóa tất cả các ký tự đặc biệt trong JavaScript

Để loại bỏ các điểm nhấn và các ký tự đặc biệt khác như /?! (), chỉ cần sử dụng cùng một công thức ở trên, chỉ thay thế mọi thứ trừ các chữ cái và số.

const str = 'ÁÉÍÓÚáéíóúâêîôûàèìòùÇç/.,[email protected]#$%&_-12345';
const parsed = str.normalize('NFD').replace(/([\u0300-\u036f]|[^0-9a-zA-Z])/g, '');
console.log(parsed);

Giải trình

Để hiểu những gì xảy ra trong mã trên, tôi khuyên bạn nên đọc đoạn trước mà tôi nói về Unicode và phương thức bình thường hóa.

Phần bổ sung duy nhất, trong trường hợp này, là tạo 2 nhóm trong regex thông qua

 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');
3 và thêm vào nhóm 2 biểu thức thông thường
 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');
4, có nghĩa là: bất cứ điều gì không (^) 0-9, A-Z hoặc A-Z, cũng được thay thế.

Nếu bạn không muốn xóa không gian, chỉ cần thêm

 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');
5:

str.normalize('NFD').replace(/([\u0300-\u036f]|[^0-9a-zA-Z\s])/g, '')

Thay thế các ký tự đặc biệt

Một trường hợp sử dụng khá thường xuyên khác là sự cần thiết phải xóa các điểm nhấn và sau đó thay thế các ký tự đặc biệt bằng một số khác, ví dụ: "Bất kỳ cụm từ nào" -> "bất kỳ cụm từ".

Có một biểu thức chính quy rất tốt để thay thế các ký tự không phải là chữ cái hoặc số phổ biến, nhưng biểu thức này cũng loại bỏ các điểm nhấn.

'Here\'s à sentence'.replace(/[^\w\-]+/g, '-'); // Here-s-sentence

Nếu chúng ta chỉ muốn xóa các điểm nhấn và sau đó thay thế các ký tự đặc biệt khác, chúng ta cần thực hiện các loại được đề xuất trong ví dụ đầu tiên:

 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');
0

Nhưng có lẽ bạn cũng cần phải thay thế dấu gạch nối không cần thiết, như trong trường hợp "Đây là một câu !!!" biến thành "Điều này là một bản án ---".

Dưới đây là một chức năng hoàn chỉnh để loại bỏ các điểm nhấn, thay thế các ký tự đặc biệt bằng dấu gạch nối, cũng loại bỏ các dấu gạch nối bổ sung:

 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');
1

Nếu bạn muốn sử dụng cùng một chức năng này để "trượt" một URL, chỉ cần thêm

 str = str.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,'');
6 ở cuối và nó đã hoàn thành!

Tôi nghĩ rằng tôi đã bao gồm tất cả các trường hợp định kỳ hơn khi làm việc với các điểm nhấn và các nhân vật đặc biệt trong JavaScript. Tôi biết rằng đó là một thách thức bổ sung cho nhiều ngoại ngữ không có phương pháp tích hợp để đối phó với các nhân vật đặc biệt.

Tìm thấy điều này hữu ích không bạn?

Làm cách nào để thay đổi Unicode?

Hiển thị hoạt động trên bài đăng này ...
Giải mã chuỗi thành Unicode.....
Gọi phương thức thay thế và đảm bảo chuyển nó một chuỗi unicode làm đối số đầu tiên của nó: str.decode ("UTF-8"). Thay thế (u "\ u2022", "*").
Mã hóa trở lại UTF-8, nếu cần: str.decode ("UTF-8"). Thay thế (u "\ u2022", "*"). Encode ("UTF-8").

JavaScript có sử dụng unicode hoặc ascii không?

Unicode trong JavaScript.Thông số kỹ thuật ES2015 đề cập rằng văn bản mã nguồn được thể hiện bằng Unicode (phiên bản 5.1 trở lên).Văn bản nguồn là một chuỗi các điểm mã từ U+0000 đến U+10ffff.source code text is expressed using Unicode (version 5.1 and above). The source text is a sequence of code points from U+0000 to U+10FFFF .

JavaScript có hỗ trợ Unicode Regex không?

Hỗ trợ Unicode duy nhất trong các regexes JavaScript là khớp các điểm mã cụ thể với \ uffff.Bạn có thể sử dụng chúng trong phạm vi trong các lớp ký tự.. You can use those in ranges in character classes.

JavaScript có thể đọc Unicode không?

Giống như trong mã nguồn, Unicode cũng có thể được biểu diễn trong chuỗi JavaScript bằng cú pháp \ uxxxx.Unicode can also be represented in a Javascript string ​using the \uXXXX syntax.