Tôi đang cố gắng phân tích chuỗi đến để xác định xem chuỗi có chứa bất kỳ biểu tượng cảm xúc nào không.Phân tích cú pháp biểu tượng cảm xúc Node.js
Tôi đã trải qua this great article by Mathias và đang tận dụng cả hai số punycode
gốc để mã hóa/giải mã và regenerate
để tạo regex. Tôi cũng đang sử dụng EmojiData để nhận từ điển emojis của mình.
Với điều đó tất cả đã nói, một số biểu tượng cảm xúc nhất định tiếp tục là các trình phát ít phiền toái và từ chối không khớp. Đối với một số biểu tượng cảm xúc nhất định, tôi tiếp tục nhận được một cặp điểm mã.
// Example of a single code point:
console.log(punycode.ucs2.decode(''));
>> [ 128169 ]
// Example of a paired code point:
console.log(punycode.ucs2.decode('⌛️'));
>> [ 8987, 65039 ]
Mathias chạm về vấn đề này trong bài viết của ông (và đưa ra một ví dụ về punycode làm việc xung quanh này) nhưng thậm chí sử dụng ví dụ của mình tôi nhận được một câu trả lời đúng:
function countSymbols(string) {
return punycode.ucs2.decode(string).length;
}
console.log(countSymbols(''));
>> 1
console.log(countSymbols('⌛️'));
>> 2
là gì cách tốt nhất để phát hiện liệu một chuỗi có chứa tất cả các biểu tượng cảm xúc hay không? Đây là một bằng chứng về khái niệm để giải pháp có thể là sức mạnh vũ phu khi cần thiết.
--- CẬP NHẬT ---
Một chút ngữ cảnh nữa trên biểu tượng cảm xúc của tôi ở trên.
Đây là giống hệt nhau bằng mắt nhưng trên thực tế giá trị unicode khác nhau (điều thứ hai là từ ví dụ trên):
⌛ // \u231b
⌛️ // \u231b\ufe0f
Người đầu tiên hoạt động tuyệt vời, thứ hai thì không. Thật không may, phiên bản thứ hai là những gì iOS dường như sử dụng (nếu bạn sao chép và dán từ iMessage bạn nhận được thứ hai, và khi nhận được một văn bản từ Twilio, cùng một điều).
Vì vậy, có thể thấy rằng dấu kết hợp (có thêm chút unicode trên ví dụ thứ hai) là những gì đang vấp ngã những thứ ở đây. Tôi đang tìm cách để loại bỏ tốt nhất các yếu tố này từ chuỗi của tôi. – thekevinscott
Nếu bất kỳ ai từng gặp phải trường hợp sử dụng tương tự, tôi đã đóng gói tất cả thành một mô-đun npm: https://github.com/scottlabs/emojiExists – thekevinscott