Phạm vi bạn đã chọn là Khu vực sử dụng cá nhân, chứa ký tự không chuẩn. Các mạng được sử dụng để mã hóa biểu tượng cảm xúc dưới dạng các giá trị khác nhau, không nhất quán trong phạm vi này.
Gần đây hơn, biểu tượng cảm xúc đã được đưa ra tiêu chuẩn 'thống nhất' codepoints. Rất nhiều trong số này nằm ngoài Mặt phẳng đa ngôn ngữ cơ bản, trong khối U + 1F300 – U + 1F5FF, bao gồm cả ví dụ U + 1F534 Vòng tròn lớn màu đỏ của bạn.
Bạn có thể phát hiện các ký tự này với [\U0001F300-\U0001F5FF]
trong công cụ regex hỗ trợ các ký tự không phải BMP, nhưng JavaScript RegExp
không phải là một con thú như vậy. Thật không may là mô hình chuỗi JS được dựa trên đơn vị UTF-16 mã, do đó bạn sẽ phải làm việc với UTF-16 người đại diện trong một regexp:
return this.replace(/([\uE000-\uF8FF]|\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])/g, '')
Tuy nhiên, lưu ý rằng có những nhân vật khác trong đa ngôn ngữ cơ bản Máy bay được sử dụng làm biểu tượng cảm xúc bằng điện thoại nhưng có biểu tượng cảm xúc từ trước. Ví dụ: U + 2665 là nhân vật Heart Suit truyền thống ♥, nhưng nó được hiển thị dưới dạng biểu tượng cảm xúc trên một số thiết bị. Đó là vào bạn cho dù bạn đối xử với điều này như biểu tượng cảm xúc và cố gắng loại bỏ nó. Xem this list để biết thêm ví dụ.
[Có nhiều ký tự trong phạm vi đó] (http://inamidst.com/stuff/unidata/) - có lẽ bạn nên loại bỏ các điểm mã riêng lẻ mà bạn không thích? – sarnold
Tôi nghĩ rằng http://stackoverflow.com/questions/3744721/javascript-strings-outside-of-the-bmp trả lời câu hỏi của bạn. –
Dưới đây là một bài viết hay cũng đề cập đến các phạm vi đó: http://crocodillon.com/blog/parsing-emoji-unicode-in-javascript – acme