Hướng dẫn javascript replace special characters with unicode - javascript thay thế các ký tự đặc biệt bằng unicode

Lấy ví dụ chuỗi sau:

“A profile of Mr. T, the A Team’s most well known member.”

Làm cách nào để sử dụng JavaScript Thay thế mã hóa ký tự Unicode và chuyển đổi nó thành phần sau:

"A profile of Mr. T, the A Team's most well known member."

hỏi ngày 17 tháng 6 năm 2015 lúc 22:35Jun 17, 2015 at 22:35

Hướng dẫn javascript replace special characters with unicode - javascript thay thế các ký tự đặc biệt bằng unicode

2

@Adeneo đã đăng một tùy chọn bằng jQuery. Đây là một câu trả lời có liên quan tôi thấy không sử dụng jQuery. Từ câu trả lời này: Cách đúng để giải mã một chuỗi có các thực thể HTML đặc biệt trong đó là gì?

function parseHtmlEnteties(str) {
    return str.replace(/&#([0-9]{1,4});/gi, function(match, numStr) {
        var num = parseInt(numStr, 10); // read num as normal number
        return String.fromCharCode(num);
    });
}

Đã trả lời ngày 17 tháng 6 năm 2015 lúc 23:01Jun 17, 2015 at 23:01

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

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.

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

const str = 'ÁÉÍÓÚáéíóúâêîôûàèìòùÇç';
const parsed = str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
console.log(parsed);
0 và thêm vào nhóm 2 biểu thức thông thường
const str = 'ÁÉÍÓÚáéíóúâêîôûàèìòùÇç';
const parsed = str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
console.log(parsed);
1, 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

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

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:

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

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:

const replaceSpecialChars = (str) => {
	return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '') // Remove accents
		.replace(/([^\w]+|\s+)/g, '-') // Replace space and other characters by hyphen
		.replace(/\-\-+/g, '-')	// Replaces multiple hyphens by one hyphen
		.replace(/(^-+|-+$)/g, ''); // Remove extra hyphens from beginning or end of the string
}

console.log(replaceSpecialChars('This is a sentence!!!'));

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

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

Tôi có thể sử dụng Unicode trong JavaScript không?

Trong JavaScript, các định danh và chữ có thể được thể hiện bằng Unicode thông qua chuỗi thoát Unicode.Cú pháp chung là \ uxxxx, trong đó x biểu thị bốn chữ số thập lục phân.Ví dụ: chữ O được ký hiệu là '\ u006f' trong Unicode.the identifiers and string literals can be expressed in Unicode via a Unicode escape sequence. The general syntax is \uXXXX , where X denotes four hexadecimal digits. For example, the letter o is denoted as '\u006F' in Unicode.

Ký tự Unicode được đặt trong JavaScript là gì?

Unicode là một superset của ASCII và Latin-1 và hỗ trợ hầu như mọi ngôn ngữ viết hiện đang được sử dụng trên hành tinh.ECMAScript 3 yêu cầu các triển khai JavaScript để hỗ trợ Unicode phiên bản 2.1 trở lên và ECMAScript 5 yêu cầu các triển khai để hỗ trợ Unicode 3 trở lên.a superset of ASCII and Latin-1 and supports virtually every written language currently used on the planet. ECMAScript 3 requires JavaScript implementations to support Unicode version 2.1 or later, and ECMAScript 5 requires implementations to support Unicode 3 or later.

Tôi có thể sử dụng các ký tự đặc biệt trong JavaScript không?

JavaScript cho phép chúng tôi thêm các ký tự đặc biệt vào chuỗi văn bản bằng dấu hiệu Backslash (\).Chúng ta có thể thêm các loại ký tự đặc biệt khác nhau, bao gồm trích dẫn đơn, trích dẫn kép, ampersand, dòng mới, tab, backspace, form Feed, v.v., sử dụng dấu gạch chéo ngược ngay trước các ký tự.. We can add different types of special characters, including the single quote, double quote, ampersand, new line, tab, backspace, form feed, etc., using the backslash just before the characters.