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
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. Để 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: 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: 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. Để 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ố. 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.Cách xóa các điểm nhấn trong JavaScript
const str = 'ÁÉÍÓÚáéíóúâêîôûàèìòùÇç';
const parsed = str.normalize['NFD'].replace[/[\u0300-\u036f]/g, ''];
console.log[parsed];
// 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']; // Á
Xóa tất cả các ký tự đặc biệt trong JavaScript
const str = 'ÁÉÍÓÚáéíóúâêîôûàèìòùÇç/.,[email protected]#$%&_-12345';
const parsed = str.normalize['NFD'].replace[/[[\u0300-\u036f]|[^0-9a-zA-Z]]/g, ''];
console.log[parsed];
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.