How do I remove emoji code using JavaScript? I thought I had taken care of it using the code below, but I still have characters like ๐ด.
function removeInvalidChars() {
return this.replace(/[\uE000-\uF8FF]/g, '');
}
For me none of the answers completely removed all emojis so I had to do some work myself and this is what i got :
text.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g, '');
Also, it should take into account that if one inserting the string later to the database, replacing with empty string could expose security issue. instead replace with the replacement character U+FFFD, see : http://www.unicode.org/reports/tr36/#Deletion_of_Noncharacters
The range you have selected is the Private Use Area, containing non-standard characters. Carriers used to encode emoji as different, inconsistent values inside this range.
More recently, the emoji have been given standardised 'unified' codepoints. Many of these are outside of the Basic Multilingual Plane, in the block U+1F300โU+1F5FF, including your example ๐ด U+1F534 Large Red Circle.
You could detect these characters with [\U0001F300-\U0001F5FF] in a regex engine that supported non-BMP characters, but JavaScript's RegExp is not such a beast. Unfortunately the JS string model is based on UTF-16 code units, so you'd have to work with the UTF-16 surrogates in a regexp:
return this.replace(/([\uE000-\uF8FF]|\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])/g, '')
However, note that there are other characters in the Basic Multilingual Plane that are used as emoji by phones but which long predate emoji. For example U+2665 is the traditional Heart Suit character โฅ, but it may be rendered as an emoji graphic on some devices. It's up to you whether you treat this as emoji and try to remove it. See this list for more examples.
I solved it by using a regex with Unicode property escapes. I got it from this article, it's for Java but still very helpful - Remove Emojis from a Java String.
'Smile๐'.replace(/[^\p{L}\p{N}\p{P}\p{Z}^$\n]/gu, '');
It removes all symbols except:
\p{L} - all letters from any language
\p{N} - numbers
\p{P} - punctuation
\p{Z} - whitespace separators
^$\n - add any symbols you want to keep
This one should be more correct and it works, but for me it leaves some trash symbols in the string:
'Smile๐'.replace(/\p{Emoji}/gu, '');
Edit: added symbols from comments
I've found many suggestions around but the regex that have solved my problem is:
/(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g
A short example
function removeEmojis (string) {
var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
return string.replace(regex, '');
}
Hope it can help you
Just an addition to #hababr answer.
If you need to get rid of complicated emojis, you have to remove also additional things like modifiers and etc:
'๐จ๐ฟโ๐ค'.replace(/[\p{Emoji}\p{Emoji_Modifier}\p{Emoji_Component}\p{Emoji_Modifier_Base}\p{Emoji_Presentation}]/gu, '').charCodeAt(0)
update:
*#0-9 - are Emoji characters with a text representation by default, per the Unicode Standard.
so, my current solution is next:
'๐จ๐ฟโ๐ค'.replace(/(?![*#0-9]+)[\p{Emoji}\p{Emoji_Modifier}\p{Emoji_Component}\p{Emoji_Modifier_Base}\p{Emoji_Presentation}]/gu, '').charCodeAt(0)
I know this post is a bit old, but I stumbled across this very problem at work and a colleague came up with an interesting idea. Basically instead of stripping emoji character only allow valid characters in. Consulting this ASCII table:
http://www.asciitable.com/
A function such as this could only keep legal characters (the range itself dependent on what you are after)
function (input) {
var result = '';
if (input.length == 0)
return input;
for (var indexOfInput = 0, lengthOfInput = input.length; indexOfInput < lengthOfInput; indexOfInput++) {
var charAtSpecificIndex = input[indexOfInput].charCodeAt(0);
if ((32 <= charAtSpecificIndex) && (charAtSpecificIndex <= 126)) {
result += input[indexOfInput];
}
}
return result;
};
This should preserve all numbers, letters and special characters of the Alphabet for a situation where you wish to preserve the English alphabet + number + special characters. Hope it helps someone :)
#bobince's solution didn't work for me. Either the Emojis stayed there or they were swapped by a different Emoji.
This solution did the trick for me:
var ranges = [
'\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF
'\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F
'\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF
];
$('#mybtn').on('click', function() {
removeInvalidChars();
})
function removeInvalidChars() {
var str = $('#myinput').val();
str = str.replace(new RegExp(ranges.join('|'), 'g'), '');
$("#myinput").val(str);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="myinput"/>
<input type="submit" id="mybtn" value="clear"/>
Source
After searching and trying lots of unicode regex, I suggest you try this, it can cover all of emojis:
function removeEmoji(str) {
let strCopy = str;
const emojiKeycapRegex = /[\u0023-\u0039]\ufe0f?\u20e3/g;
const emojiRegex = /\p{Extended_Pictographic}/gu;
const emojiComponentRegex = /\p{Emoji_Component}/gu;
if (emojiKeycapRegex.test(strCopy)) {
strCopy = strCopy.replace(emojiKeycapRegex, '');
}
if (emojiRegex.test(strCopy)) {
strCopy = strCopy.replace(emojiRegex, '');
}
if (emojiComponentRegex.test(strCopy)) {
// eslint-disable-next-line no-restricted-syntax
for (const emoji of (strCopy.match(emojiComponentRegex) || [])) {
if (/[\d|*|#]/.test(emoji)) {
continue;
}
strCopy = strCopy.replace(emoji, '');
}
}
return strCopy;
}
let a = "1๏ธโฃaa๐คนโโ๏ธb#๏ธโฃ๐คโ
โ23#!^*bb๐คน๐พ๐คนโโ๏ธ๐ด๐ปccc";
console.log(removeEmoji(a))
Refrence: Unicode Emoij Document
None of the answers here worked for all the unicode characters I tested (specifically characters in the miscellaneous range such as โฝ or โฏ๏ธ).
Here is one that worked for me, (heavily) inspired from this SO PHP answer:
function _removeEmojis(str) {
return str.replace(/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?/g, '');
}
(My use case is sorting in a data grid where emojis can come first in a string but users want the text ordered by the actual words.)
sandre89's answer is good but not perfect.
I spent some time on the subject and have a working solution.
var ranges = [
'[\u00A0-\u269f]',
'[\u26A0-\u329f]',
// The following characters could not be minified correctly
// if specifed with the ES6 syntax \u{1F400}
'[๐-๐ง]'
//'[\u{1F004}-\u{1F9C0}]'
];
$('#mybtn').on('click', function() {
removeInvalidChars();
});
function removeInvalidChars() {
var str = $('#myinput').val();
str = str.replace(new RegExp(ranges.join('|'), 'ug'), '');
$("#myinput").val(str);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="myinput" />
<input type="submit" id="mybtn" value="clear" />
Here is my CodePen
There are some points to note, though.
Unicode characters from U+1F000 up need a special notation, so you can use sandre89's way, or opt for the \u{1F000} ES6 notation, which may or may not work with your minificator. I succeeded pasting the emojis directly in the UTF-8 encoded script.
Don't forget the u flag in the regex, or your Javascript engine may throw an error.
Beware that things may not be working due to the file encoding, character set, or minificator. In my case nothing worked until I took the script off an .isml file (Demandware) and pasted it into a .js file.
You may gain some insight by referring to Wikipedia Emoji page and How many bytes does one Unicode character take?, and by tinkering with this Online Unicode converter, as I did.
var emoji =/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?|[\u20E3]|[\u26A0-\u3000]|\uD83E[\udd00-\uddff]|[\u00A0-\u269F]/g;
str.replace(emoji, "");
i add this '\uD83E[\udd00-\uddff]'
these emojis were updated when 2018 june
if u want block emojis after other update then use this
str.replace(/[^0-9a-zA-Zใฑ-ํฃ+รรท=%โคโกโโง)(*&^/~##!-:;,?`_|<>{}ยฅยฃโฌ$โโ โกโโโขยฐโปยคใใยกยฟโฉ\[\]\"\' \\]/g ,"");
u can block all emojis and u can only use eng, num, hangle, and some Characters
thx :)
You can use this function to replace emojis with nothing:
function msgAfterClearEmojis(msg)
{
var new_msg = msg.replace(/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?|[\u20E3]|[\u26A0-\u3000]|\uD83E[\udd00-\uddff]|[\u00A0-\u269F]/g, '').trim();
return new_msg;
}
You can check here with emoji..
๐ , ๐ , ๐ฝ
function removeEmoji() {
var y = document.getElementById('textbox_id1');
y.value = y.value.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g, '');
}
input {
padding: 5px;
}
<input type="text" id="textbox_id1" placeholder="Remove emoji..." oninput="removeEmoji()">
You can take more emojis from here: Emoji Keyboard Online
This is the iteration on #hababr's answer.
His answer removes lots of standard chars like $, +, < and so on.
This version keeps all of them (except for the \ backslash - dunno how to properly escape it).
"hey๐ hau๐ ahoy๐ดโโ ๏ธ !##$%^&*()-_=+ยฑยง;:'\|`~/?[]{},.<>".replace(/[^\p{L}\p{N}\p{P}\p{Z}{^$=+ยฑ\\'|`\\~<>}]/gu, "")
// "hey hau ahoy !##$%^&*()-_=+ยฑยง;:'|`~/?[]{},.<>"
I have this regex and it works for all emojis i found on this page
try this regex
<:[^:\s]+:\d+>|<a:[^:\s]+:\d+>|(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]|\ufe0f)
var emojiRegex = /\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g;
console.log(text.replace(emojiRegex,'');
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
function isEmoji(str) {
var ranges = [
'[\uE000-\uF8FF]',
'\uD83C[\uDC00-\uDFFF]',
'\uD83D[\uDC00-\uDFFF]',
'[\u2011-\u26FF]',
'\uD83E[\uDD10-\uDDFF]'
];
if (str.match(ranges.join('|'))) {
return true;
} else {
return false;
}
}
$(document).ready(function(){
$('input').on('input',function(){
var $th = $(this);
console.log("Value of Input"+$th.val());
emojiInput= isEmoji($th.val());
if (emojiInput==true) {
$th.val("");
}
});
});
</script>
</head>
<body>
Enter your name: <input type="text">
</body>
</html>
There is a modern solution using categories
Modern browsers support Unicode property, which allows you to match emojis based on their belonging in the Emoji Unicode category. For example, you can use Unicode property escapes like \p{Emoji} or \P{Emoji} to match/no match emoji characters. Note that 0123456789#* and other characters are interpreted as emojis using the previous Unicode category. Therefore, a better way to do this is to use the {Extended_Pictographic} Unicode category that denotes all the characters typically understood as emojis instead of the {Emoji} category.
const withEmojis = /\p{Extended_Pictographic}/u
withEmojis.test('๐๐');
//true
withEmojis.test('ab');
//false
withEmojis.test('1');
//false
or with negation
const noEmojis = /\P{Extended_Pictographic}/u
noEmojis.test('๐');
//false
noEmojis.test('1212');
//false
You can use mathiasbynens/emoji-regex package to remove or replace emojis.
You can see the latest build's content to grab the regex by visiting following url:
http://unpkg.com/emoji-regex/index.js
In detail, this function first uses TextEncoder to convert content into a byte array with utf-8 encoding, then loops through this array, if it finds a byte whose first five bits are 11110 (i.e. 0xF0), it means this is an emoji start, then it replaces this byte and the next three bytes with 0x30 (i.e. number 0). Finally, it uses TextDecoder to convert the modified byte array back to a string, and uses replaceAll method to remove extra 0s.
function removeEmoji (content) {
let conByte = new TextEncoder("utf-8").encode(content);
for (let i = 0; i < conByte.length; i++) {
if ((conByte[i] & 0xF8) == 0xF0) {
for (let j = 0; j < 4; j++) {
conByte[i+j]=0x30;
}
i += 3;
}
}
content = new TextDecoder("utf-8").decode(conByte);
return content.replaceAll("0000", "");
}
Related
I need help for how to detect if an input contains a Japanese emoji/emoticon.
Currently my character set is charset=utf-8. On inputting text, the user can enter Japanese characters/alpanumerics/symbols but if they insert an emoji, onsubmit JavaScript will check if there is an emoji, error message will display.
I can't get this to work because I have no idea on how to detect an emoji in JavaScript?
The answers might work but are terrible because they rely on unicode ranges that are unreadable and somewhat "magic" because it's not always clear where do they come from and why they work, not to mention they're not resilient to new emojis being added to the spec.
Major browsers now support unicode property escape which allows for matching emojis based on their belonging in the Emoji unicode category: \p{Emoji} matches an emoji, \P{Emoji} matches a non-emoji.
Note that officially, 0123456789#* and other characters are emojis too, so the property escape you might want to use is not Emoji but rather Extended_Pictographic which denotes all the characters typically understood as emojis!
Make sure to include the u flag at the end.
console.log(
/\p{Emoji}/u.test('flowers'), // false :)
/\p{Emoji}/u.test('flowers ๐ผ๐บ๐ธ'), // true :)
/\p{Emoji}/u.test('flowers 123'), // true :(
)
console.log(
/\p{Extended_Pictographic}/u.test('flowers'), // false :)
/\p{Extended_Pictographic}/u.test('flowers ๐ผ๐บ๐ธ'), // true :)
/\p{Extended_Pictographic}/u.test('flowers 123'), // false :)
)
This works fine for detecting emojis, but if you want to use the same regex to extract them, you might be surprised with its behavior, since some emojis that appear as one character are actually several characters. They're what we call emoji sequences, more about them in this question
const regex = /\p{Extended_Pictographic}/ug
const family = '๐จโ๐ฉโ๐ง' // "family
console.log(family.length) // not 1, but 8!
console.log(regex.test(family)) // true, as expected
console.log(family.match(regex)) // not [family], but [man, woman, girl]
You can use the following regex:
/(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g
If you just want to remove it from the string, you can do something like this.
function removeEmojis (string) {
var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
return string.replace(regex, '');
}
A simple function that returns true if your string contains one or more emojis.
function isEmoji(str) {
var ranges = [
'(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])' // U+1F680 to U+1F6FF
];
if (str.match(ranges.join('|'))) {
return true;
} else {
return false;
}
}
First of all, you cannot rely on ECMAScript 2018+ compliant \p{Emoji} (at least at the time of writing). It really matches some 0123456789#* non-emoji chars (see Nino Filiu's answer). See Why do Unicode emoji property escapes match numbers? for more details.
To test if there are any emoji chars in a string in JavaScript, you can use the following ECMAScript 2018+ compliant solution (mind the u flag):
const regex_emoji = /[\p{Extended_Pictographic}\u{1F3FB}-\u{1F3FF}\u{1F9B0}-\u{1F9B3}]/u;
console.log( regex_emoji.test('flowers 123') ); // => false
console.log( regex_emoji.test('flowers ๐ผ๐บ๐ธ') ); // => true
You can even extract one or more emoji char sequences using this pattern (note the added g flag to find all occurrences and + to match one or more consecutive occurrences of the character class pattern):
const regex_emoji = /[\p{Extended_Pictographic}\u{1F3FB}-\u{1F3FF}\u{1F9B0}-\u{1F9B3}]+/gu;
console.log( 'flowers 123'.match(regex_emoji) ); // => null
console.log( 'flowers ๐ผ๐บ๐ธ'.match(regex_emoji) ); // => [ "๐ผ๐บ๐ธ" ]
In a nutshell, the Extended_Pictographic Unicode category class matches most emoji chars except for some Emoji_Components, that is, light skin to dark skin mode chars (\u{1F3FB}-\u{1F3FF}) and red-haired to white-haired chars (\u{1F9B0}-\u{1F9B3}).
To count, or extract emojis as an array of single chars or consecutive sequences (like in the second code snippet from above) from longer texts and perform other actions on emojis, you can use a custom regex (like in Scott Weaver's answer). It is safer to use the longer, escaped version. However, there are 4702 emoji characters defined in the Emoji Keyboard/Display Test Data for UTR #51 (Version: 14.0) file. Thus, the (ES5 compliant, works even in IE) regex to match a single emoji char is
var EmojiPattern = /[#*0-9]\uFE0F?\u20E3|\u00A9\uFE0F?|[\u00AE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA]\uFE0F?|[\u231A\u231B]|[\u2328\u23CF]\uFE0F?|[\u23E9-\u23EC]|[\u23ED-\u23EF]\uFE0F?|\u23F0|[\u23F1\u23F2]\uFE0F?|\u23F3|[\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC]\uFE0F?|[\u25FD\u25FE]|[\u2600-\u2604\u260E\u2611]\uFE0F?|[\u2614\u2615]|\u2618\uFE0F?|\u261D(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642]\uFE0F?|[\u2648-\u2653]|[\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E]\uFE0F?|\u267F|\u2692\uFE0F?|\u2693|[\u2694-\u2697\u2699\u269B\u269C\u26A0]\uFE0F?|\u26A1|\u26A7\uFE0F?|[\u26AA\u26AB]|[\u26B0\u26B1]\uFE0F?|[\u26BD\u26BE\u26C4\u26C5]|\u26C8\uFE0F?|\u26CE|[\u26CF\u26D1\u26D3]\uFE0F?|\u26D4|\u26E9\uFE0F?|\u26EA|[\u26F0\u26F1]\uFE0F?|[\u26F2\u26F3]|\u26F4\uFE0F?|\u26F5|[\u26F7\u26F8]\uFE0F?|\u26F9(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?|\uFE0F(?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\u26FA\u26FD]|\u2702\uFE0F?|\u2705|[\u2708\u2709]\uFE0F?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|\u270F\uFE0F?|[\u2712\u2714\u2716\u271D\u2721]\uFE0F?|\u2728|[\u2733\u2734\u2744\u2747]\uFE0F?|[\u274C\u274E\u2753-\u2755\u2757]|\u2763\uFE0F?|\u2764(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uFE0F(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?)?|[\u2795-\u2797]|\u27A1\uFE0F?|[\u27B0\u27BF]|[\u2934\u2935\u2B05-\u2B07]\uFE0F?|[\u2B1B\u2B1C\u2B50\u2B55]|[\u3030\u303D\u3297\u3299]\uFE0F?|\uD83C(?:[\uDC04\uDCCF]|[\uDD70\uDD71\uDD7E\uDD7F]\uFE0F?|[\uDD8E\uDD91-\uDD9A]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDE01|\uDE02\uFE0F?|[\uDE1A\uDE2F\uDE32-\uDE36]|\uDE37\uFE0F?|[\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20]|[\uDF21\uDF24-\uDF2C]\uFE0F?|[\uDF2D-\uDF35]|\uDF36\uFE0F?|[\uDF37-\uDF7C]|\uDF7D\uFE0F?|[\uDF7E-\uDF84]|\uDF85(?:\uD83C[\uDFFB-\uDFFF])?|[\uDF86-\uDF93]|[\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F]\uFE0F?|[\uDFA0-\uDFC1]|\uDFC2(?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDFC5\uDFC6]|\uDFC7(?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC8\uDFC9]|\uDFCA(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDFCB\uDFCC](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?|\uFE0F(?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDFCD\uDFCE]\uFE0F?|[\uDFCF-\uDFD3]|[\uDFD4-\uDFDF]\uFE0F?|[\uDFE0-\uDFF0]|\uDFF3(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08)|\uFE0F(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?)?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?|[\uDFF5\uDFF7]\uFE0F?|[\uDFF8-\uDFFF])|\uD83D(?:[\uDC00-\uDC07]|\uDC08(?:\u200D\u2B1B)?|[\uDC09-\uDC14]|\uDC15(?:\u200D\uD83E\uDDBA)?|[\uDC16-\uDC3A]|\uDC3B(?:\u200D\u2744\uFE0F?)?|[\uDC3C-\uDC3E]|\uDC3F\uFE0F?|\uDC40|\uDC41(?:\u200D\uD83D\uDDE8\uFE0F?|\uFE0F(?:\u200D\uD83D\uDDE8\uFE0F?)?)?|[\uDC42\uDC43](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC44\uDC45]|[\uDC46-\uDC50](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC51-\uDC65]|[\uDC66\uDC67](?:\uD83C[\uDFFB-\uDFFF])?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF]|\uDC8B\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?))?|\uDC6A|[\uDC6B-\uDC6D](?:\uD83C[\uDFFB-\uDFFF])?|\uDC6E(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDC70\uDC71](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC72(?:\uD83C[\uDFFB-\uDFFF])?|\uDC73(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDC74-\uDC76](?:\uD83C[\uDFFB-\uDFFF])?|\uDC77(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC78(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC79-\uDC7B]|\uDC7C(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC7D-\uDC80]|[\uDC81\uDC82](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDC83(?:\uD83C[\uDFFB-\uDFFF])?|\uDC84|\uDC85(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC86\uDC87](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDC88-\uDC8E]|\uDC8F(?:\uD83C[\uDFFB-\uDFFF])?|\uDC90|\uDC91(?:\uD83C[\uDFFB-\uDFFF])?|[\uDC92-\uDCA9]|\uDCAA(?:\uD83C[\uDFFB-\uDFFF])?|[\uDCAB-\uDCFC]|\uDCFD\uFE0F?|[\uDCFF-\uDD3D]|[\uDD49\uDD4A]\uFE0F?|[\uDD4B-\uDD4E\uDD50-\uDD67]|[\uDD6F\uDD70\uDD73]\uFE0F?|\uDD74(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|\uDD75(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?|\uFE0F(?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDD76-\uDD79]\uFE0F?|\uDD7A(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD87\uDD8A-\uDD8D]\uFE0F?|\uDD90(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDD95\uDD96](?:\uD83C[\uDFFB-\uDFFF])?|\uDDA4|[\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA]\uFE0F?|[\uDDFB-\uDE2D]|\uDE2E(?:\u200D\uD83D\uDCA8)?|[\uDE2F-\uDE34]|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|[\uDE37-\uDE44]|[\uDE45-\uDE47](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDE48-\uDE4A]|\uDE4B(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDE4C(?:\uD83C[\uDFFB-\uDFFF])?|[\uDE4D\uDE4E](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDE4F(?:\uD83C[\uDFFB-\uDFFF])?|[\uDE80-\uDEA2]|\uDEA3(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDEA4-\uDEB3]|[\uDEB4-\uDEB6](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDEB7-\uDEBF]|\uDEC0(?:\uD83C[\uDFFB-\uDFFF])?|[\uDEC1-\uDEC5]|\uDECB\uFE0F?|\uDECC(?:\uD83C[\uDFFB-\uDFFF])?|[\uDECD-\uDECF]\uFE0F?|[\uDED0-\uDED2\uDED5-\uDED7\uDEDD-\uDEDF]|[\uDEE0-\uDEE5\uDEE9]\uFE0F?|[\uDEEB\uDEEC]|[\uDEF0\uDEF3]\uFE0F?|[\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0])|\uD83E(?:\uDD0C(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD0D\uDD0E]|\uDD0F(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD10-\uDD17]|[\uDD18-\uDD1F](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD20-\uDD25]|\uDD26(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDD27-\uDD2F]|[\uDD30-\uDD34](?:\uD83C[\uDFFB-\uDFFF])?|\uDD35(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDD36(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD37-\uDD39](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDD3A|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD3D\uDD3E](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDD3F-\uDD45\uDD47-\uDD76]|\uDD77(?:\uD83C[\uDFFB-\uDFFF])?|[\uDD78-\uDDB4]|[\uDDB5\uDDB6](?:\uD83C[\uDFFB-\uDFFF])?|\uDDB7|[\uDDB8\uDDB9](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDDBA|\uDDBB(?:\uD83C[\uDFFB-\uDFFF])?|[\uDDBC-\uDDCC]|[\uDDCD-\uDDCF](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDDD0|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1|[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|[\uDDAF-\uDDB3\uDDBC\uDDBD])))?))?|[\uDDD2\uDDD3](?:\uD83C[\uDFFB-\uDFFF])?|\uDDD4(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|\uDDD5(?:\uD83C[\uDFFB-\uDFFF])?|[\uDDD6-\uDDDD](?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC2]|[\uDEC3-\uDEC5](?:\uD83C[\uDFFB-\uDFFF])?|[\uDED0-\uDED9\uDEE0-\uDEE7]|\uDEF0(?:\uD83C[\uDFFB-\uDFFF])?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?|[\uDEF2-\uDEF6](?:\uD83C[\uDFFB-\uDFFF])?)/g;
See the regex demo. The g flag at the end means this regex can match all occurrences in the input string.
The pattern is created dynamically from the list of emojis and contracted using a regex trie.
See this JavaScript demo:
var text = 'flowers ๐ผ๐บ๐ธ';
// Detecting if there is at least one emoji
console.log( emoji_detection_regex.test(text) ); // => true
// Counting emojis
console.log( (text.match(emoji_count_regex) || []).length ); // => 3
// Extracting one by one, single emoji array
console.log( text.match(emoji_count_regex) ); // => ["๐ผ","๐บ","๐ธ"]
// Extracting emoji sequences
console.log( text.match(emoji_extract_or_remove_regex) ); // => ["๐ผ๐บ๐ธ"]
// Removing emojis
console.log( text.replace(emoji_extract_or_remove_regex, '') ); // => 'flowers '
<script src="https://gitcdn.link/repo/stribizhev/Emojis/main/ws_emoji_regex.js"></script>
The emoji regex declarations are available in the https://github.com/stribizhev/Emojis/blob/main/ws_emoji_regex.js file.
We can detect all list of surrogate pairs or the Emoji characters in a specific range.
If the issue related with storing the input string to database like MySQL version before 5.5 we need to detect and remove all the surrogate pairs using the below regex
/([\uD800-\uDBFF][\uDC00-\uDFFF])/g.
Update for 2020: Many of these patterns don't match compound emojis or Modifier Sequences correctly, or are simply outdated and do not match the newer emojis.
Consider this kissing couple: ๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ. It's actually 6 (maybe more) other emojis glued together with the ZWJ zero-width joiner. To match this correctly, you have to actually match that sequence.
Thus, by matching the longer sequences first, this brute-force pattern (too long too paste, but it's a simple alternation and runs fast) correctly parses all 3521 combined emojis as of May 2021:
GitHub link: https://github.com/sweaver2112/Regex-combined-emojis
Edit 5/10/2021: If the size of the Unicode escape version of this regex is off-putting to you, you could actually skip the Unicode escape sequences and just use literal emojis, thereby saving tons of space...well, almost. This character, "*๏ธโฃ", which starts with an asterisk, will throw a "nothing to quantify" error. Getting rid of just this guy yields a much shorter, still working, copy/pastable regex that matches 3,520/3,521 Emojis at the present date:
Regex 101 Demo (compact, unsafe literal emoji version)
Regex 101 Demo (long, safe unicode escape version)
The demos' input string includes all characters from
https://unicode.org/emoji/charts/full-emoji-list.html (13.1)
https://unicode.org/emoji/charts-13.1/full-emoji-modifiers.html
Working example using the compact version:
/*the pattern*/
var emojiPattern = String.raw`(?:๐ง๐ปโโค๏ธโ๐โ๐ง๐ผ|๐ง๐ปโโค๏ธโ๐โ๐ง๐ฝ|๐ง๐ปโโค๏ธโ๐โ๐ง๐พ|๐ง๐ปโโค๏ธโ๐โ๐ง๐ฟ|๐ง๐ผโโค๏ธโ๐โ๐ง๐ป|๐ง๐ผโโค๏ธโ๐โ๐ง๐ฝ|๐ง๐ผโโค๏ธโ๐โ๐ง๐พ|๐ง๐ผโโค๏ธโ๐โ๐ง๐ฟ|๐ง๐ฝโโค๏ธโ๐โ๐ง๐ป|๐ง๐ฝโโค๏ธโ๐โ๐ง๐ผ|๐ง๐ฝโโค๏ธโ๐โ๐ง๐พ|๐ง๐ฝโโค๏ธโ๐โ๐ง๐ฟ|๐ง๐พโโค๏ธโ๐โ๐ง๐ป|๐ง๐พโโค๏ธโ๐โ๐ง๐ผ|๐ง๐พโโค๏ธโ๐โ๐ง๐ฝ|๐ง๐พโโค๏ธโ๐โ๐ง๐ฟ|๐ง๐ฟโโค๏ธโ๐โ๐ง๐ป|๐ง๐ฟโโค๏ธโ๐โ๐ง๐ผ|๐ง๐ฟโโค๏ธโ๐โ๐ง๐ฝ|๐ง๐ฟโโค๏ธโ๐โ๐ง๐พ|๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ป|๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ผ|๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ฝ|๐ฉ๐ปโโค๏ธโ๐โ๐จ๐พ|๐ฉ๐ปโโค๏ธโ๐โ๐จ๐ฟ|๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ป|๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ผ|๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ฝ|๐ฉ๐ผโโค๏ธโ๐โ๐จ๐พ|๐ฉ๐ผโโค๏ธโ๐โ๐จ๐ฟ|๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ป|๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ผ|๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ฝ|๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐พ|๐ฉ๐ฝโโค๏ธโ๐โ๐จ๐ฟ|๐ฉ๐พโโค๏ธโ๐โ๐จ๐ป|๐ฉ๐พโโค๏ธโ๐โ๐จ๐ผ|๐ฉ๐พโโค๏ธโ๐โ๐จ๐ฝ|๐ฉ๐พโโค๏ธโ๐โ๐จ๐พ|๐ฉ๐พโโค๏ธโ๐โ๐จ๐ฟ|๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ป|๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ผ|๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ฝ|๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐พ|๐ฉ๐ฟโโค๏ธโ๐โ๐จ๐ฟ|๐จ๐ปโโค๏ธโ๐โ๐จ๐ป|๐จ๐ปโโค๏ธโ๐โ๐จ๐ผ|๐จ๐ปโโค๏ธโ๐โ๐จ๐ฝ|๐จ๐ปโโค๏ธโ๐โ๐จ๐พ|๐จ๐ปโโค๏ธโ๐โ๐จ๐ฟ|๐จ๐ผโโค๏ธโ๐โ๐จ๐ป|๐จ๐ผโโค๏ธโ๐โ๐จ๐ผ|๐จ๐ผโโค๏ธโ๐โ๐จ๐ฝ|๐จ๐ผโโค๏ธโ๐โ๐จ๐พ|๐จ๐ผโโค๏ธโ๐โ๐จ๐ฟ|๐จ๐ฝโโค๏ธโ๐โ๐จ๐ป|๐จ๐ฝโโค๏ธโ๐โ๐จ๐ผ|๐จ๐ฝโโค๏ธโ๐โ๐จ๐ฝ|๐จ๐ฝโโค๏ธโ๐โ๐จ๐พ|๐จ๐ฝโโค๏ธโ๐โ๐จ๐ฟ|๐จ๐พโโค๏ธโ๐โ๐จ๐ป|๐จ๐พโโค๏ธโ๐โ๐จ๐ผ|๐จ๐พโโค๏ธโ๐โ๐จ๐ฝ|๐จ๐พโโค๏ธโ๐โ๐จ๐พ|๐จ๐พโโค๏ธโ๐โ๐จ๐ฟ|๐จ๐ฟโโค๏ธโ๐โ๐จ๐ป|๐จ๐ฟโโค๏ธโ๐โ๐จ๐ผ|๐จ๐ฟโโค๏ธโ๐โ๐จ๐ฝ|๐จ๐ฟโโค๏ธโ๐โ๐จ๐พ|๐จ๐ฟโโค๏ธโ๐โ๐จ๐ฟ|๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ป|๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ผ|๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ฝ|๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐พ|๐ฉ๐ปโโค๏ธโ๐โ๐ฉ๐ฟ|๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ป|๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ผ|๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ|๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐พ|๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฟ|๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ป|๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ผ|๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ฝ|๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐พ|๐ฉ๐ฝโโค๏ธโ๐โ๐ฉ๐ฟ|๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ป|๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ผ|๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ฝ|๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐พ|๐ฉ๐พโโค๏ธโ๐โ๐ฉ๐ฟ|๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ป|๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ผ|๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ฝ|๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐พ|๐ฉ๐ฟโโค๏ธโ๐โ๐ฉ๐ฟ|๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ|๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ|๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ|๐ง๐ปโ๐คโ๐ง๐ป|๐ง๐ปโ๐คโ๐ง๐ผ|๐ง๐ปโ๐คโ๐ง๐ฝ|๐ง๐ปโ๐คโ๐ง๐พ|๐ง๐ปโ๐คโ๐ง๐ฟ|๐ง๐ผโ๐คโ๐ง๐ป|๐ง๐ผโ๐คโ๐ง๐ผ|๐ง๐ผโ๐คโ๐ง๐ฝ|๐ง๐ผโ๐คโ๐ง๐พ|๐ง๐ผโ๐คโ๐ง๐ฟ|๐ง๐ฝโ๐คโ๐ง๐ป|๐ง๐ฝโ๐คโ๐ง๐ผ|๐ง๐ฝโ๐คโ๐ง๐ฝ|๐ง๐ฝโ๐คโ๐ง๐พ|๐ง๐ฝโ๐คโ๐ง๐ฟ|๐ง๐พโ๐คโ๐ง๐ป|๐ง๐พโ๐คโ๐ง๐ผ|๐ง๐พโ๐คโ๐ง๐ฝ|๐ง๐พโ๐คโ๐ง๐พ|๐ง๐พโ๐คโ๐ง๐ฟ|๐ง๐ฟโ๐คโ๐ง๐ป|๐ง๐ฟโ๐คโ๐ง๐ผ|๐ง๐ฟโ๐คโ๐ง๐ฝ|๐ง๐ฟโ๐คโ๐ง๐พ|๐ง๐ฟโ๐คโ๐ง๐ฟ|๐ฉ๐ปโ๐คโ๐ฉ๐ผ|๐ฉ๐ปโ๐คโ๐ฉ๐ฝ|๐ฉ๐ปโ๐คโ๐ฉ๐พ|๐ฉ๐ปโ๐คโ๐ฉ๐ฟ|๐ฉ๐ผโ๐คโ๐ฉ๐ป|๐ฉ๐ผโ๐คโ๐ฉ๐ฝ|๐ฉ๐ผโ๐คโ๐ฉ๐พ|๐ฉ๐ผโ๐คโ๐ฉ๐ฟ|๐ฉ๐ฝโ๐คโ๐ฉ๐ป|๐ฉ๐ฝโ๐คโ๐ฉ๐ผ|๐ฉ๐ฝโ๐คโ๐ฉ๐พ|๐ฉ๐ฝโ๐คโ๐ฉ๐ฟ|๐ฉ๐พโ๐คโ๐ฉ๐ป|๐ฉ๐พโ๐คโ๐ฉ๐ผ|๐ฉ๐พโ๐คโ๐ฉ๐ฝ|๐ฉ๐พโ๐คโ๐ฉ๐ฟ|๐ฉ๐ฟโ๐คโ๐ฉ๐ป|๐ฉ๐ฟโ๐คโ๐ฉ๐ผ|๐ฉ๐ฟโ๐คโ๐ฉ๐ฝ|๐ฉ๐ฟโ๐คโ๐ฉ๐พ|๐ฉ๐ปโ๐คโ๐จ๐ผ|๐ฉ๐ปโ๐คโ๐จ๐ฝ|๐ฉ๐ปโ๐คโ๐จ๐พ|๐ฉ๐ปโ๐คโ๐จ๐ฟ|๐ฉ๐ผโ๐คโ๐จ๐ป|๐ฉ๐ผโ๐คโ๐จ๐ฝ|๐ฉ๐ผโ๐คโ๐จ๐พ|๐ฉ๐ผโ๐คโ๐จ๐ฟ|๐ฉ๐ฝโ๐คโ๐จ๐ป|๐ฉ๐ฝโ๐คโ๐จ๐ผ|๐ฉ๐ฝโ๐คโ๐จ๐พ|๐ฉ๐ฝโ๐คโ๐จ๐ฟ|๐ฉ๐พโ๐คโ๐จ๐ป|๐ฉ๐พโ๐คโ๐จ๐ผ|๐ฉ๐พโ๐คโ๐จ๐ฝ|๐ฉ๐พโ๐คโ๐จ๐ฟ|๐ฉ๐ฟโ๐คโ๐จ๐ป|๐ฉ๐ฟโ๐คโ๐จ๐ผ|๐ฉ๐ฟโ๐คโ๐จ๐ฝ|๐ฉ๐ฟโ๐คโ๐จ๐พ|๐จ๐ปโ๐คโ๐จ๐ผ|๐จ๐ปโ๐คโ๐จ๐ฝ|๐จ๐ปโ๐คโ๐จ๐พ|๐จ๐ปโ๐คโ๐จ๐ฟ|๐จ๐ผโ๐คโ๐จ๐ป|๐จ๐ผโ๐คโ๐จ๐ฝ|๐จ๐ผโ๐คโ๐จ๐พ|๐จ๐ผโ๐คโ๐จ๐ฟ|๐จ๐ฝโ๐คโ๐จ๐ป|๐จ๐ฝโ๐คโ๐จ๐ผ|๐จ๐ฝโ๐คโ๐จ๐พ|๐จ๐ฝโ๐คโ๐จ๐ฟ|๐จ๐พโ๐คโ๐จ๐ป|๐จ๐พโ๐คโ๐จ๐ผ|๐จ๐พโ๐คโ๐จ๐ฝ|๐จ๐พโ๐คโ๐จ๐ฟ|๐จ๐ฟโ๐คโ๐จ๐ป|๐จ๐ฟโ๐คโ๐จ๐ผ|๐จ๐ฟโ๐คโ๐จ๐ฝ|๐จ๐ฟโ๐คโ๐จ๐พ|๐ง๐ปโโค๏ธโ๐ง๐ผ|๐ง๐ปโโค๏ธโ๐ง๐ฝ|๐ง๐ปโโค๏ธโ๐ง๐พ|๐ง๐ปโโค๏ธโ๐ง๐ฟ|๐ง๐ผโโค๏ธโ๐ง๐ป|๐ง๐ผโโค๏ธโ๐ง๐ฝ|๐ง๐ผโโค๏ธโ๐ง๐พ|๐ง๐ผโโค๏ธโ๐ง๐ฟ|๐ง๐ฝโโค๏ธโ๐ง๐ป|๐ง๐ฝโโค๏ธโ๐ง๐ผ|๐ง๐ฝโโค๏ธโ๐ง๐พ|๐ง๐ฝโโค๏ธโ๐ง๐ฟ|๐ง๐พโโค๏ธโ๐ง๐ป|๐ง๐พโโค๏ธโ๐ง๐ผ|๐ง๐พโโค๏ธโ๐ง๐ฝ|๐ง๐พโโค๏ธโ๐ง๐ฟ|๐ง๐ฟโโค๏ธโ๐ง๐ป|๐ง๐ฟโโค๏ธโ๐ง๐ผ|๐ง๐ฟโโค๏ธโ๐ง๐ฝ|๐ง๐ฟโโค๏ธโ๐ง๐พ|๐ฉ๐ปโโค๏ธโ๐จ๐ป|๐ฉ๐ปโโค๏ธโ๐จ๐ผ|๐ฉ๐ปโโค๏ธโ๐จ๐ฝ|๐ฉ๐ปโโค๏ธโ๐จ๐พ|๐ฉ๐ปโโค๏ธโ๐จ๐ฟ|๐ฉ๐ผโโค๏ธโ๐จ๐ป|๐ฉ๐ผโโค๏ธโ๐จ๐ผ|๐ฉ๐ผโโค๏ธโ๐จ๐ฝ|๐ฉ๐ผโโค๏ธโ๐จ๐พ|๐ฉ๐ผโโค๏ธโ๐จ๐ฟ|๐ฉ๐ฝโโค๏ธโ๐จ๐ป|๐ฉ๐ฝโโค๏ธโ๐จ๐ผ|๐ฉ๐ฝโโค๏ธโ๐จ๐ฝ|๐ฉ๐ฝโโค๏ธโ๐จ๐พ|๐ฉ๐ฝโโค๏ธโ๐จ๐ฟ|๐ฉ๐พโโค๏ธโ๐จ๐ป|๐ฉ๐พโโค๏ธโ๐จ๐ผ|๐ฉ๐พโโค๏ธโ๐จ๐ฝ|๐ฉ๐พโโค๏ธโ๐จ๐พ|๐ฉ๐พโโค๏ธโ๐จ๐ฟ|๐ฉ๐ฟโโค๏ธโ๐จ๐ป|๐ฉ๐ฟโโค๏ธโ๐จ๐ผ|๐ฉ๐ฟโโค๏ธโ๐จ๐ฝ|๐ฉ๐ฟโโค๏ธโ๐จ๐พ|๐ฉ๐ฟโโค๏ธโ๐จ๐ฟ|๐จ๐ปโโค๏ธโ๐จ๐ป|๐จ๐ปโโค๏ธโ๐จ๐ผ|๐จ๐ปโโค๏ธโ๐จ๐ฝ|๐จ๐ปโโค๏ธโ๐จ๐พ|๐จ๐ปโโค๏ธโ๐จ๐ฟ|๐จ๐ผโโค๏ธโ๐จ๐ป|๐จ๐ผโโค๏ธโ๐จ๐ผ|๐จ๐ผโโค๏ธโ๐จ๐ฝ|๐จ๐ผโโค๏ธโ๐จ๐พ|๐จ๐ผโโค๏ธโ๐จ๐ฟ|๐จ๐ฝโโค๏ธโ๐จ๐ป|๐จ๐ฝโโค๏ธโ๐จ๐ผ|๐จ๐ฝโโค๏ธโ๐จ๐ฝ|๐จ๐ฝโโค๏ธโ๐จ๐พ|๐จ๐ฝโโค๏ธโ๐จ๐ฟ|๐จ๐พโโค๏ธโ๐จ๐ป|๐จ๐พโโค๏ธโ๐จ๐ผ|๐จ๐พโโค๏ธโ๐จ๐ฝ|๐จ๐พโโค๏ธโ๐จ๐พ|๐จ๐พโโค๏ธโ๐จ๐ฟ|๐จ๐ฟโโค๏ธโ๐จ๐ป|๐จ๐ฟโโค๏ธโ๐จ๐ผ|๐จ๐ฟโโค๏ธโ๐จ๐ฝ|๐จ๐ฟโโค๏ธโ๐จ๐พ|๐จ๐ฟโโค๏ธโ๐จ๐ฟ|๐ฉ๐ปโโค๏ธโ๐ฉ๐ป|๐ฉ๐ปโโค๏ธโ๐ฉ๐ผ|๐ฉ๐ปโโค๏ธโ๐ฉ๐ฝ|๐ฉ๐ปโโค๏ธโ๐ฉ๐พ|๐ฉ๐ปโโค๏ธโ๐ฉ๐ฟ|๐ฉ๐ผโโค๏ธโ๐ฉ๐ป|๐ฉ๐ผโโค๏ธโ๐ฉ๐ผ|๐ฉ๐ผโโค๏ธโ๐ฉ๐ฝ|๐ฉ๐ผโโค๏ธโ๐ฉ๐พ|๐ฉ๐ผโโค๏ธโ๐ฉ๐ฟ|๐ฉ๐ฝโโค๏ธโ๐ฉ๐ป|๐ฉ๐ฝโโค๏ธโ๐ฉ๐ผ|๐ฉ๐ฝโโค๏ธโ๐ฉ๐ฝ|๐ฉ๐ฝโโค๏ธโ๐ฉ๐พ|๐ฉ๐ฝโโค๏ธโ๐ฉ๐ฟ|๐ฉ๐พโโค๏ธโ๐ฉ๐ป|๐ฉ๐พโโค๏ธโ๐ฉ๐ผ|๐ฉ๐พโโค๏ธโ๐ฉ๐ฝ|๐ฉ๐พโโค๏ธโ๐ฉ๐พ|๐ฉ๐พโโค๏ธโ๐ฉ๐ฟ|๐ฉ๐ฟโโค๏ธโ๐ฉ๐ป|๐ฉ๐ฟโโค๏ธโ๐ฉ๐ผ|๐ฉ๐ฟโโค๏ธโ๐ฉ๐ฝ|๐ฉ๐ฟโโค๏ธโ๐ฉ๐พ|๐ฉ๐ฟโโค๏ธโ๐ฉ๐ฟ|๐ฉโโค๏ธโ๐โ๐จ|๐จโโค๏ธโ๐โ๐จ|๐ฉโโค๏ธโ๐โ๐ฉ|๐จโ๐ฉโ๐งโ๐ฆ|๐จโ๐ฉโ๐ฆโ๐ฆ|๐จโ๐ฉโ๐งโ๐ง|๐จโ๐จโ๐งโ๐ฆ|๐จโ๐จโ๐ฆโ๐ฆ|๐จโ๐จโ๐งโ๐ง|๐ฉโ๐ฉโ๐งโ๐ฆ|๐ฉโ๐ฉโ๐ฆโ๐ฆ|๐ฉโ๐ฉโ๐งโ๐ง|๐งโ๐คโ๐ง|๐ฉโโค๏ธโ๐จ|๐จโโค๏ธโ๐จ|๐ฉโโค๏ธโ๐ฉ|๐จโ๐ฉโ๐ฆ|๐จโ๐ฉโ๐ง|๐จโ๐จโ๐ฆ|๐จโ๐จโ๐ง|๐ฉโ๐ฉโ๐ฆ|๐ฉโ๐ฉโ๐ง|๐จโ๐ฆโ๐ฆ|๐จโ๐งโ๐ฆ|๐จโ๐งโ๐ง|๐ฉโ๐ฆโ๐ฆ|๐ฉโ๐งโ๐ฆ|๐ฉโ๐งโ๐ง|๐๏ธโ๐จ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐จ๐ปโ๐ฆฐ|๐จ๐ผโ๐ฆฐ|๐จ๐ฝโ๐ฆฐ|๐จ๐พโ๐ฆฐ|๐จ๐ฟโ๐ฆฐ|๐จ๐ปโ๐ฆฑ|๐จ๐ผโ๐ฆฑ|๐จ๐ฝโ๐ฆฑ|๐จ๐พโ๐ฆฑ|๐จ๐ฟโ๐ฆฑ|๐จ๐ปโ๐ฆณ|๐จ๐ผโ๐ฆณ|๐จ๐ฝโ๐ฆณ|๐จ๐พโ๐ฆณ|๐จ๐ฟโ๐ฆณ|๐จ๐ปโ๐ฆฒ|๐จ๐ผโ๐ฆฒ|๐จ๐ฝโ๐ฆฒ|๐จ๐พโ๐ฆฒ|๐จ๐ฟโ๐ฆฒ|๐ฉ๐ปโ๐ฆฐ|๐ฉ๐ผโ๐ฆฐ|๐ฉ๐ฝโ๐ฆฐ|๐ฉ๐พโ๐ฆฐ|๐ฉ๐ฟโ๐ฆฐ|๐ง๐ปโ๐ฆฐ|๐ง๐ผโ๐ฆฐ|๐ง๐ฝโ๐ฆฐ|๐ง๐พโ๐ฆฐ|๐ง๐ฟโ๐ฆฐ|๐ฉ๐ปโ๐ฆฑ|๐ฉ๐ผโ๐ฆฑ|๐ฉ๐ฝโ๐ฆฑ|๐ฉ๐พโ๐ฆฑ|๐ฉ๐ฟโ๐ฆฑ|๐ง๐ปโ๐ฆฑ|๐ง๐ผโ๐ฆฑ|๐ง๐ฝโ๐ฆฑ|๐ง๐พโ๐ฆฑ|๐ง๐ฟโ๐ฆฑ|๐ฉ๐ปโ๐ฆณ|๐ฉ๐ผโ๐ฆณ|๐ฉ๐ฝโ๐ฆณ|๐ฉ๐พโ๐ฆณ|๐ฉ๐ฟโ๐ฆณ|๐ง๐ปโ๐ฆณ|๐ง๐ผโ๐ฆณ|๐ง๐ฝโ๐ฆณ|๐ง๐พโ๐ฆณ|๐ง๐ฟโ๐ฆณ|๐ฉ๐ปโ๐ฆฒ|๐ฉ๐ผโ๐ฆฒ|๐ฉ๐ฝโ๐ฆฒ|๐ฉ๐พโ๐ฆฒ|๐ฉ๐ฟโ๐ฆฒ|๐ง๐ปโ๐ฆฒ|๐ง๐ผโ๐ฆฒ|๐ง๐ฝโ๐ฆฒ|๐ง๐พโ๐ฆฒ|๐ง๐ฟโ๐ฆฒ|๐ฑ๐ปโโ๏ธ|๐ฑ๐ผโโ๏ธ|๐ฑ๐ฝโโ๏ธ|๐ฑ๐พโโ๏ธ|๐ฑ๐ฟโโ๏ธ|๐ฑ๐ปโโ๏ธ|๐ฑ๐ผโโ๏ธ|๐ฑ๐ฝโโ๏ธ|๐ฑ๐พโโ๏ธ|๐ฑ๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐
๐ปโโ๏ธ|๐
๐ผโโ๏ธ|๐
๐ฝโโ๏ธ|๐
๐พโโ๏ธ|๐
๐ฟโโ๏ธ|๐
๐ปโโ๏ธ|๐
๐ผโโ๏ธ|๐
๐ฝโโ๏ธ|๐
๐พโโ๏ธ|๐
๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐คฆ๐ปโโ๏ธ|๐คฆ๐ผโโ๏ธ|๐คฆ๐ฝโโ๏ธ|๐คฆ๐พโโ๏ธ|๐คฆ๐ฟโโ๏ธ|๐คฆ๐ปโโ๏ธ|๐คฆ๐ผโโ๏ธ|๐คฆ๐ฝโโ๏ธ|๐คฆ๐พโโ๏ธ|๐คฆ๐ฟโโ๏ธ|๐คท๐ปโโ๏ธ|๐คท๐ผโโ๏ธ|๐คท๐ฝโโ๏ธ|๐คท๐พโโ๏ธ|๐คท๐ฟโโ๏ธ|๐คท๐ปโโ๏ธ|๐คท๐ผโโ๏ธ|๐คท๐ฝโโ๏ธ|๐คท๐พโโ๏ธ|๐คท๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐จ๐ปโโ๏ธ|๐จ๐ผโโ๏ธ|๐จ๐ฝโโ๏ธ|๐จ๐พโโ๏ธ|๐จ๐ฟโโ๏ธ|๐ฉ๐ปโโ๏ธ|๐ฉ๐ผโโ๏ธ|๐ฉ๐ฝโโ๏ธ|๐ฉ๐พโโ๏ธ|๐ฉ๐ฟโโ๏ธ|๐ง๐ปโ๐|๐ง๐ผโ๐|๐ง๐ฝโ๐|๐ง๐พโ๐|๐ง๐ฟโ๐|๐จ๐ปโ๐|๐จ๐ผโ๐|๐จ๐ฝโ๐|๐จ๐พโ๐|๐จ๐ฟโ๐|๐ฉ๐ปโ๐|๐ฉ๐ผโ๐|๐ฉ๐ฝโ๐|๐ฉ๐พโ๐|๐ฉ๐ฟโ๐|๐ง๐ปโ๐ซ|๐ง๐ผโ๐ซ|๐ง๐ฝโ๐ซ|๐ง๐พโ๐ซ|๐ง๐ฟโ๐ซ|๐จ๐ปโ๐ซ|๐จ๐ผโ๐ซ|๐จ๐ฝโ๐ซ|๐จ๐พโ๐ซ|๐จ๐ฟโ๐ซ|๐ฉ๐ปโ๐ซ|๐ฉ๐ผโ๐ซ|๐ฉ๐ฝโ๐ซ|๐ฉ๐พโ๐ซ|๐ฉ๐ฟโ๐ซ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐จ๐ปโโ๏ธ|๐จ๐ผโโ๏ธ|๐จ๐ฝโโ๏ธ|๐จ๐พโโ๏ธ|๐จ๐ฟโโ๏ธ|๐ฉ๐ปโโ๏ธ|๐ฉ๐ผโโ๏ธ|๐ฉ๐ฝโโ๏ธ|๐ฉ๐พโโ๏ธ|๐ฉ๐ฟโโ๏ธ|๐ง๐ปโ๐พ|๐ง๐ผโ๐พ|๐ง๐ฝโ๐พ|๐ง๐พโ๐พ|๐ง๐ฟโ๐พ|๐จ๐ปโ๐พ|๐จ๐ผโ๐พ|๐จ๐ฝโ๐พ|๐จ๐พโ๐พ|๐จ๐ฟโ๐พ|๐ฉ๐ปโ๐พ|๐ฉ๐ผโ๐พ|๐ฉ๐ฝโ๐พ|๐ฉ๐พโ๐พ|๐ฉ๐ฟโ๐พ|๐ง๐ปโ๐ณ|๐ง๐ผโ๐ณ|๐ง๐ฝโ๐ณ|๐ง๐พโ๐ณ|๐ง๐ฟโ๐ณ|๐จ๐ปโ๐ณ|๐จ๐ผโ๐ณ|๐จ๐ฝโ๐ณ|๐จ๐พโ๐ณ|๐จ๐ฟโ๐ณ|๐ฉ๐ปโ๐ณ|๐ฉ๐ผโ๐ณ|๐ฉ๐ฝโ๐ณ|๐ฉ๐พโ๐ณ|๐ฉ๐ฟโ๐ณ|๐ง๐ปโ๐ง|๐ง๐ผโ๐ง|๐ง๐ฝโ๐ง|๐ง๐พโ๐ง|๐ง๐ฟโ๐ง|๐จ๐ปโ๐ง|๐จ๐ผโ๐ง|๐จ๐ฝโ๐ง|๐จ๐พโ๐ง|๐จ๐ฟโ๐ง|๐ฉ๐ปโ๐ง|๐ฉ๐ผโ๐ง|๐ฉ๐ฝโ๐ง|๐ฉ๐พโ๐ง|๐ฉ๐ฟโ๐ง|๐ง๐ปโ๐ญ|๐ง๐ผโ๐ญ|๐ง๐ฝโ๐ญ|๐ง๐พโ๐ญ|๐ง๐ฟโ๐ญ|๐จ๐ปโ๐ญ|๐จ๐ผโ๐ญ|๐จ๐ฝโ๐ญ|๐จ๐พโ๐ญ|๐จ๐ฟโ๐ญ|๐ฉ๐ปโ๐ญ|๐ฉ๐ผโ๐ญ|๐ฉ๐ฝโ๐ญ|๐ฉ๐พโ๐ญ|๐ฉ๐ฟโ๐ญ|๐ง๐ปโ๐ผ|๐ง๐ผโ๐ผ|๐ง๐ฝโ๐ผ|๐ง๐พโ๐ผ|๐ง๐ฟโ๐ผ|๐จ๐ปโ๐ผ|๐จ๐ผโ๐ผ|๐จ๐ฝโ๐ผ|๐จ๐พโ๐ผ|๐จ๐ฟโ๐ผ|๐ฉ๐ปโ๐ผ|๐ฉ๐ผโ๐ผ|๐ฉ๐ฝโ๐ผ|๐ฉ๐พโ๐ผ|๐ฉ๐ฟโ๐ผ|๐ง๐ปโ๐ฌ|๐ง๐ผโ๐ฌ|๐ง๐ฝโ๐ฌ|๐ง๐พโ๐ฌ|๐ง๐ฟโ๐ฌ|๐จ๐ปโ๐ฌ|๐จ๐ผโ๐ฌ|๐จ๐ฝโ๐ฌ|๐จ๐พโ๐ฌ|๐จ๐ฟโ๐ฌ|๐ฉ๐ปโ๐ฌ|๐ฉ๐ผโ๐ฌ|๐ฉ๐ฝโ๐ฌ|๐ฉ๐พโ๐ฌ|๐ฉ๐ฟโ๐ฌ|๐ง๐ปโ๐ป|๐ง๐ผโ๐ป|๐ง๐ฝโ๐ป|๐ง๐พโ๐ป|๐ง๐ฟโ๐ป|๐จ๐ปโ๐ป|๐จ๐ผโ๐ป|๐จ๐ฝโ๐ป|๐จ๐พโ๐ป|๐จ๐ฟโ๐ป|๐ฉ๐ปโ๐ป|๐ฉ๐ผโ๐ป|๐ฉ๐ฝโ๐ป|๐ฉ๐พโ๐ป|๐ฉ๐ฟโ๐ป|๐ง๐ปโ๐ค|๐ง๐ผโ๐ค|๐ง๐ฝโ๐ค|๐ง๐พโ๐ค|๐ง๐ฟโ๐ค|๐จ๐ปโ๐ค|๐จ๐ผโ๐ค|๐จ๐ฝโ๐ค|๐จ๐พโ๐ค|๐จ๐ฟโ๐ค|๐ฉ๐ปโ๐ค|๐ฉ๐ผโ๐ค|๐ฉ๐ฝโ๐ค|๐ฉ๐พโ๐ค|๐ฉ๐ฟโ๐ค|๐ง๐ปโ๐จ|๐ง๐ผโ๐จ|๐ง๐ฝโ๐จ|๐ง๐พโ๐จ|๐ง๐ฟโ๐จ|๐จ๐ปโ๐จ|๐จ๐ผโ๐จ|๐จ๐ฝโ๐จ|๐จ๐พโ๐จ|๐จ๐ฟโ๐จ|๐ฉ๐ปโ๐จ|๐ฉ๐ผโ๐จ|๐ฉ๐ฝโ๐จ|๐ฉ๐พโ๐จ|๐ฉ๐ฟโ๐จ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐จ๐ปโโ๏ธ|๐จ๐ผโโ๏ธ|๐จ๐ฝโโ๏ธ|๐จ๐พโโ๏ธ|๐จ๐ฟโโ๏ธ|๐ฉ๐ปโโ๏ธ|๐ฉ๐ผโโ๏ธ|๐ฉ๐ฝโโ๏ธ|๐ฉ๐พโโ๏ธ|๐ฉ๐ฟโโ๏ธ|๐ง๐ปโ๐|๐ง๐ผโ๐|๐ง๐ฝโ๐|๐ง๐พโ๐|๐ง๐ฟโ๐|๐จ๐ปโ๐|๐จ๐ผโ๐|๐จ๐ฝโ๐|๐จ๐พโ๐|๐จ๐ฟโ๐|๐ฉ๐ปโ๐|๐ฉ๐ผโ๐|๐ฉ๐ฝโ๐|๐ฉ๐พโ๐|๐ฉ๐ฟโ๐|๐ง๐ปโ๐|๐ง๐ผโ๐|๐ง๐ฝโ๐|๐ง๐พโ๐|๐ง๐ฟโ๐|๐จ๐ปโ๐|๐จ๐ผโ๐|๐จ๐ฝโ๐|๐จ๐พโ๐|๐จ๐ฟโ๐|๐ฉ๐ปโ๐|๐ฉ๐ผโ๐|๐ฉ๐ฝโ๐|๐ฉ๐พโ๐|๐ฉ๐ฟโ๐|๐ฎ๐ปโโ๏ธ|๐ฎ๐ผโโ๏ธ|๐ฎ๐ฝโโ๏ธ|๐ฎ๐พโโ๏ธ|๐ฎ๐ฟโโ๏ธ|๐ฎ๐ปโโ๏ธ|๐ฎ๐ผโโ๏ธ|๐ฎ๐ฝโโ๏ธ|๐ฎ๐พโโ๏ธ|๐ฎ๐ฟโโ๏ธ|๐ต๐ปโโ๏ธ|๐ต๐ผโโ๏ธ|๐ต๐ฝโโ๏ธ|๐ต๐พโโ๏ธ|๐ต๐ฟโโ๏ธ|๐ต๐ปโโ๏ธ|๐ต๐ผโโ๏ธ|๐ต๐ฝโโ๏ธ|๐ต๐พโโ๏ธ|๐ต๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐ท๐ปโโ๏ธ|๐ท๐ผโโ๏ธ|๐ท๐ฝโโ๏ธ|๐ท๐พโโ๏ธ|๐ท๐ฟโโ๏ธ|๐ท๐ปโโ๏ธ|๐ท๐ผโโ๏ธ|๐ท๐ฝโโ๏ธ|๐ท๐พโโ๏ธ|๐ท๐ฟโโ๏ธ|๐ณ๐ปโโ๏ธ|๐ณ๐ผโโ๏ธ|๐ณ๐ฝโโ๏ธ|๐ณ๐พโโ๏ธ|๐ณ๐ฟโโ๏ธ|๐ณ๐ปโโ๏ธ|๐ณ๐ผโโ๏ธ|๐ณ๐ฝโโ๏ธ|๐ณ๐พโโ๏ธ|๐ณ๐ฟโโ๏ธ|๐คต๐ปโโ๏ธ|๐คต๐ผโโ๏ธ|๐คต๐ฝโโ๏ธ|๐คต๐พโโ๏ธ|๐คต๐ฟโโ๏ธ|๐คต๐ปโโ๏ธ|๐คต๐ผโโ๏ธ|๐คต๐ฝโโ๏ธ|๐คต๐พโโ๏ธ|๐คต๐ฟโโ๏ธ|๐ฐ๐ปโโ๏ธ|๐ฐ๐ผโโ๏ธ|๐ฐ๐ฝโโ๏ธ|๐ฐ๐พโโ๏ธ|๐ฐ๐ฟโโ๏ธ|๐ฐ๐ปโโ๏ธ|๐ฐ๐ผโโ๏ธ|๐ฐ๐ฝโโ๏ธ|๐ฐ๐พโโ๏ธ|๐ฐ๐ฟโโ๏ธ|๐ฉ๐ปโ๐ผ|๐ฉ๐ผโ๐ผ|๐ฉ๐ฝโ๐ผ|๐ฉ๐พโ๐ผ|๐ฉ๐ฟโ๐ผ|๐จ๐ปโ๐ผ|๐จ๐ผโ๐ผ|๐จ๐ฝโ๐ผ|๐จ๐พโ๐ผ|๐จ๐ฟโ๐ผ|๐ง๐ปโ๐ผ|๐ง๐ผโ๐ผ|๐ง๐ฝโ๐ผ|๐ง๐พโ๐ผ|๐ง๐ฟโ๐ผ|๐ง๐ปโ๐|๐ง๐ผโ๐|๐ง๐ฝโ๐|๐ง๐พโ๐|๐ง๐ฟโ๐|๐ฆธ๐ปโโ๏ธ|๐ฆธ๐ผโโ๏ธ|๐ฆธ๐ฝโโ๏ธ|๐ฆธ๐พโโ๏ธ|๐ฆธ๐ฟโโ๏ธ|๐ฆธ๐ปโโ๏ธ|๐ฆธ๐ผโโ๏ธ|๐ฆธ๐ฝโโ๏ธ|๐ฆธ๐พโโ๏ธ|๐ฆธ๐ฟโโ๏ธ|๐ฆน๐ปโโ๏ธ|๐ฆน๐ผโโ๏ธ|๐ฆน๐ฝโโ๏ธ|๐ฆน๐พโโ๏ธ|๐ฆน๐ฟโโ๏ธ|๐ฆน๐ปโโ๏ธ|๐ฆน๐ผโโ๏ธ|๐ฆน๐ฝโโ๏ธ|๐ฆน๐พโโ๏ธ|๐ฆน๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐ถ๐ปโโ๏ธ|๐ถ๐ผโโ๏ธ|๐ถ๐ฝโโ๏ธ|๐ถ๐พโโ๏ธ|๐ถ๐ฟโโ๏ธ|๐ถ๐ปโโ๏ธ|๐ถ๐ผโโ๏ธ|๐ถ๐ฝโโ๏ธ|๐ถ๐พโโ๏ธ|๐ถ๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโ๐ฆฏ|๐ง๐ผโ๐ฆฏ|๐ง๐ฝโ๐ฆฏ|๐ง๐พโ๐ฆฏ|๐ง๐ฟโ๐ฆฏ|๐จ๐ปโ๐ฆฏ|๐จ๐ผโ๐ฆฏ|๐จ๐ฝโ๐ฆฏ|๐จ๐พโ๐ฆฏ|๐จ๐ฟโ๐ฆฏ|๐ฉ๐ปโ๐ฆฏ|๐ฉ๐ผโ๐ฆฏ|๐ฉ๐ฝโ๐ฆฏ|๐ฉ๐พโ๐ฆฏ|๐ฉ๐ฟโ๐ฆฏ|๐ง๐ปโ๐ฆผ|๐ง๐ผโ๐ฆผ|๐ง๐ฝโ๐ฆผ|๐ง๐พโ๐ฆผ|๐ง๐ฟโ๐ฆผ|๐จ๐ปโ๐ฆผ|๐จ๐ผโ๐ฆผ|๐จ๐ฝโ๐ฆผ|๐จ๐พโ๐ฆผ|๐จ๐ฟโ๐ฆผ|๐ฉ๐ปโ๐ฆผ|๐ฉ๐ผโ๐ฆผ|๐ฉ๐ฝโ๐ฆผ|๐ฉ๐พโ๐ฆผ|๐ฉ๐ฟโ๐ฆผ|๐ง๐ปโ๐ฆฝ|๐ง๐ผโ๐ฆฝ|๐ง๐ฝโ๐ฆฝ|๐ง๐พโ๐ฆฝ|๐ง๐ฟโ๐ฆฝ|๐จ๐ปโ๐ฆฝ|๐จ๐ผโ๐ฆฝ|๐จ๐ฝโ๐ฆฝ|๐จ๐พโ๐ฆฝ|๐จ๐ฟโ๐ฆฝ|๐ฉ๐ปโ๐ฆฝ|๐ฉ๐ผโ๐ฆฝ|๐ฉ๐ฝโ๐ฆฝ|๐ฉ๐พโ๐ฆฝ|๐ฉ๐ฟโ๐ฆฝ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐ฃ๐ปโโ๏ธ|๐ฃ๐ผโโ๏ธ|๐ฃ๐ฝโโ๏ธ|๐ฃ๐พโโ๏ธ|๐ฃ๐ฟโโ๏ธ|๐ฃ๐ปโโ๏ธ|๐ฃ๐ผโโ๏ธ|๐ฃ๐ฝโโ๏ธ|๐ฃ๐พโโ๏ธ|๐ฃ๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐๐ปโโ๏ธ|๐๐ผโโ๏ธ|๐๐ฝโโ๏ธ|๐๐พโโ๏ธ|๐๐ฟโโ๏ธ|๐ด๐ปโโ๏ธ|๐ด๐ผโโ๏ธ|๐ด๐ฝโโ๏ธ|๐ด๐พโโ๏ธ|๐ด๐ฟโโ๏ธ|๐ด๐ปโโ๏ธ|๐ด๐ผโโ๏ธ|๐ด๐ฝโโ๏ธ|๐ด๐พโโ๏ธ|๐ด๐ฟโโ๏ธ|๐ต๐ปโโ๏ธ|๐ต๐ผโโ๏ธ|๐ต๐ฝโโ๏ธ|๐ต๐พโโ๏ธ|๐ต๐ฟโโ๏ธ|๐ต๐ปโโ๏ธ|๐ต๐ผโโ๏ธ|๐ต๐ฝโโ๏ธ|๐ต๐พโโ๏ธ|๐ต๐ฟโโ๏ธ|๐คธ๐ปโโ๏ธ|๐คธ๐ผโโ๏ธ|๐คธ๐ฝโโ๏ธ|๐คธ๐พโโ๏ธ|๐คธ๐ฟโโ๏ธ|๐คธ๐ปโโ๏ธ|๐คธ๐ผโโ๏ธ|๐คธ๐ฝโโ๏ธ|๐คธ๐พโโ๏ธ|๐คธ๐ฟโโ๏ธ|๐คฝ๐ปโโ๏ธ|๐คฝ๐ผโโ๏ธ|๐คฝ๐ฝโโ๏ธ|๐คฝ๐พโโ๏ธ|๐คฝ๐ฟโโ๏ธ|๐คฝ๐ปโโ๏ธ|๐คฝ๐ผโโ๏ธ|๐คฝ๐ฝโโ๏ธ|๐คฝ๐พโโ๏ธ|๐คฝ๐ฟโโ๏ธ|๐คพ๐ปโโ๏ธ|๐คพ๐ผโโ๏ธ|๐คพ๐ฝโโ๏ธ|๐คพ๐พโโ๏ธ|๐คพ๐ฟโโ๏ธ|๐คพ๐ปโโ๏ธ|๐คพ๐ผโโ๏ธ|๐คพ๐ฝโโ๏ธ|๐คพ๐พโโ๏ธ|๐คพ๐ฟโโ๏ธ|๐คน๐ปโโ๏ธ|๐คน๐ผโโ๏ธ|๐คน๐ฝโโ๏ธ|๐คน๐พโโ๏ธ|๐คน๐ฟโโ๏ธ|๐คน๐ปโโ๏ธ|๐คน๐ผโโ๏ธ|๐คน๐ฝโโ๏ธ|๐คน๐พโโ๏ธ|๐คน๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ง๐ปโโ๏ธ|๐ง๐ผโโ๏ธ|๐ง๐ฝโโ๏ธ|๐ง๐พโโ๏ธ|๐ง๐ฟโโ๏ธ|๐ถโ๐ซ๏ธ|๐ต๏ธโโ๏ธ|๐ต๏ธโโ๏ธ|๐๏ธโโ๏ธ|๐๏ธโโ๏ธ|๐๏ธโโ๏ธ|๐๏ธโโ๏ธ|๐ณ๏ธโ๐|๐ณ๏ธโโง๏ธ|โน๐ปโโ๏ธ|โน๐ผโโ๏ธ|โน๐ฝโโ๏ธ|โน๐พโโ๏ธ|โน๐ฟโโ๏ธ|โน๐ปโโ๏ธ|โน๐ผโโ๏ธ|โน๐ฝโโ๏ธ|โน๐พโโ๏ธ|โน๐ฟโโ๏ธ|๐ฎโ๐จ|๐ตโ๐ซ|โค๏ธโ๐ฅ|โค๏ธโ๐ฉน|๐งโโ๏ธ|๐งโโ๏ธ|๐จโ๐ฆฐ|๐จโ๐ฆฑ|๐จโ๐ฆณ|๐จโ๐ฆฒ|๐ฉโ๐ฆฐ|๐งโ๐ฆฐ|๐ฉโ๐ฆฑ|๐งโ๐ฆฑ|๐ฉโ๐ฆณ|๐งโ๐ฆณ|๐ฉโ๐ฆฒ|๐งโ๐ฆฒ|๐ฑโโ๏ธ|๐ฑโโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐
โโ๏ธ|๐
โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐คฆโโ๏ธ|๐คฆโโ๏ธ|๐คทโโ๏ธ|๐คทโโ๏ธ|๐งโโ๏ธ|๐จโโ๏ธ|๐ฉโโ๏ธ|๐งโ๐|๐จโ๐|๐ฉโ๐|๐งโ๐ซ|๐จโ๐ซ|๐ฉโ๐ซ|๐งโโ๏ธ|๐จโโ๏ธ|๐ฉโโ๏ธ|๐งโ๐พ|๐จโ๐พ|๐ฉโ๐พ|๐งโ๐ณ|๐จโ๐ณ|๐ฉโ๐ณ|๐งโ๐ง|๐จโ๐ง|๐ฉโ๐ง|๐งโ๐ญ|๐จโ๐ญ|๐ฉโ๐ญ|๐งโ๐ผ|๐จโ๐ผ|๐ฉโ๐ผ|๐งโ๐ฌ|๐จโ๐ฌ|๐ฉโ๐ฌ|๐งโ๐ป|๐จโ๐ป|๐ฉโ๐ป|๐งโ๐ค|๐จโ๐ค|๐ฉโ๐ค|๐งโ๐จ|๐จโ๐จ|๐ฉโ๐จ|๐งโโ๏ธ|๐จโโ๏ธ|๐ฉโโ๏ธ|๐งโ๐|๐จโ๐|๐ฉโ๐|๐งโ๐|๐จโ๐|๐ฉโ๐|๐ฎโโ๏ธ|๐ฎโโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐ทโโ๏ธ|๐ทโโ๏ธ|๐ณโโ๏ธ|๐ณโโ๏ธ|๐คตโโ๏ธ|๐คตโโ๏ธ|๐ฐโโ๏ธ|๐ฐโโ๏ธ|๐ฉโ๐ผ|๐จโ๐ผ|๐งโ๐ผ|๐งโ๐|๐ฆธโโ๏ธ|๐ฆธโโ๏ธ|๐ฆนโโ๏ธ|๐ฆนโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐ถโโ๏ธ|๐ถโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโ๐ฆฏ|๐จโ๐ฆฏ|๐ฉโ๐ฆฏ|๐งโ๐ฆผ|๐จโ๐ฆผ|๐ฉโ๐ฆผ|๐งโ๐ฆฝ|๐จโ๐ฆฝ|๐ฉโ๐ฆฝ|๐โโ๏ธ|๐โโ๏ธ|๐ฏโโ๏ธ|๐ฏโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|๐ฃโโ๏ธ|๐ฃโโ๏ธ|๐โโ๏ธ|๐โโ๏ธ|โน๏ธโโ๏ธ|โน๏ธโโ๏ธ|๐ดโโ๏ธ|๐ดโโ๏ธ|๐ตโโ๏ธ|๐ตโโ๏ธ|๐คธโโ๏ธ|๐คธโโ๏ธ|๐คผโโ๏ธ|๐คผโโ๏ธ|๐คฝโโ๏ธ|๐คฝโโ๏ธ|๐คพโโ๏ธ|๐คพโโ๏ธ|๐คนโโ๏ธ|๐คนโโ๏ธ|๐งโโ๏ธ|๐งโโ๏ธ|๐จโ๐ฆ|๐จโ๐ง|๐ฉโ๐ฆ|๐ฉโ๐ง|๐โ๐ฆบ|๐ปโโ๏ธ|๐ดโโ ๏ธ|๐โโฌ|๐ฆ๐จ|๐ฆ๐ฉ|๐ฆ๐ช|๐ฆ๐ซ|๐ฆ๐ฌ|๐ฆ๐ฎ|๐ฆ๐ฑ|๐ฆ๐ฒ|๐ฆ๐ด|๐ฆ๐ถ|๐ฆ๐ท|๐ฆ๐ธ|๐ฆ๐น|๐ฆ๐บ|๐ฆ๐ผ|๐ฆ๐ฝ|๐ฆ๐ฟ|๐ง๐ฆ|๐ง๐ง|๐ง๐ฉ|๐ง๐ช|๐ง๐ซ|๐ง๐ฌ|๐ง๐ญ|๐ง๐ฎ|๐ง๐ฏ|๐ง๐ฑ|๐ง๐ฒ|๐ง๐ณ|๐ง๐ด|๐ง๐ถ|๐ง๐ท|๐ง๐ธ|๐ง๐น|๐ง๐ป|๐ง๐ผ|๐ง๐พ|๐ง๐ฟ|๐จ๐ฆ|๐จ๐จ|๐จ๐ฉ|๐จ๐ซ|๐จ๐ฌ|๐จ๐ญ|๐จ๐ฎ|๐จ๐ฐ|๐จ๐ฑ|๐จ๐ฒ|๐จ๐ณ|๐จ๐ด|๐จ๐ต|๐จ๐ท|๐จ๐บ|๐จ๐ป|๐จ๐ผ|๐จ๐ฝ|๐จ๐พ|๐จ๐ฟ|๐ฉ๐ช|๐ฉ๐ฌ|๐ฉ๐ฏ|๐ฉ๐ฐ|๐ฉ๐ฒ|๐ฉ๐ด|๐ฉ๐ฟ|๐ช๐ฆ|๐ช๐จ|๐ช๐ช|๐ช๐ฌ|๐ช๐ญ|๐ช๐ท|๐ช๐ธ|๐ช๐น|๐ช๐บ|๐ซ๐ฎ|๐ซ๐ฏ|๐ซ๐ฐ|๐ซ๐ฒ|๐ซ๐ด|๐ซ๐ท|๐ฌ๐ฆ|๐ฌ๐ง|๐ฌ๐ฉ|๐ฌ๐ช|๐ฌ๐ซ|๐ฌ๐ฌ|๐ฌ๐ญ|๐ฌ๐ฎ|๐ฌ๐ฑ|๐ฌ๐ฒ|๐ฌ๐ณ|๐ฌ๐ต|๐ฌ๐ถ|๐ฌ๐ท|๐ฌ๐ธ|๐ฌ๐น|๐ฌ๐บ|๐ฌ๐ผ|๐ฌ๐พ|๐ญ๐ฐ|๐ญ๐ฒ|๐ญ๐ณ|๐ญ๐ท|๐ญ๐น|๐ญ๐บ|๐ฎ๐จ|๐ฎ๐ฉ|๐ฎ๐ช|๐ฎ๐ฑ|๐ฎ๐ฒ|๐ฎ๐ณ|๐ฎ๐ด|๐ฎ๐ถ|๐ฎ๐ท|๐ฎ๐ธ|๐ฎ๐น|๐ฏ๐ช|๐ฏ๐ฒ|๐ฏ๐ด|๐ฏ๐ต|๐ฐ๐ช|๐ฐ๐ฌ|๐ฐ๐ญ|๐ฐ๐ฎ|๐ฐ๐ฒ|๐ฐ๐ณ|๐ฐ๐ต|๐ฐ๐ท|๐ฐ๐ผ|๐ฐ๐พ|๐ฐ๐ฟ|๐ฑ๐ฆ|๐ฑ๐ง|๐ฑ๐จ|๐ฑ๐ฎ|๐ฑ๐ฐ|๐ฑ๐ท|๐ฑ๐ธ|๐ฑ๐น|๐ฑ๐บ|๐ฑ๐ป|๐ฑ๐พ|๐ฒ๐ฆ|๐ฒ๐จ|๐ฒ๐ฉ|๐ฒ๐ช|๐ฒ๐ซ|๐ฒ๐ฌ|๐ฒ๐ญ|๐ฒ๐ฐ|๐ฒ๐ฑ|๐ฒ๐ฒ|๐ฒ๐ณ|๐ฒ๐ด|๐ฒ๐ต|๐ฒ๐ถ|๐ฒ๐ท|๐ฒ๐ธ|๐ฒ๐น|๐ฒ๐บ|๐ฒ๐ป|๐ฒ๐ผ|๐ฒ๐ฝ|๐ฒ๐พ|๐ฒ๐ฟ|๐ณ๐ฆ|๐ณ๐จ|๐ณ๐ช|๐ณ๐ซ|๐ณ๐ฌ|๐ณ๐ฎ|๐ณ๐ฑ|๐ณ๐ด|๐ณ๐ต|๐ณ๐ท|๐ณ๐บ|๐ณ๐ฟ|๐ด๐ฒ|๐ต๐ฆ|๐ต๐ช|๐ต๐ซ|๐ต๐ฌ|๐ต๐ญ|๐ต๐ฐ|๐ต๐ฑ|๐ต๐ฒ|๐ต๐ณ|๐ต๐ท|๐ต๐ธ|๐ต๐น|๐ต๐ผ|๐ต๐พ|๐ถ๐ฆ|๐ท๐ช|๐ท๐ด|๐ท๐ธ|๐ท๐บ|๐ท๐ผ|๐ธ๐ฆ|๐ธ๐ง|๐ธ๐จ|๐ธ๐ฉ|๐ธ๐ช|๐ธ๐ฌ|๐ธ๐ญ|๐ธ๐ฎ|๐ธ๐ฏ|๐ธ๐ฐ|๐ธ๐ฑ|๐ธ๐ฒ|๐ธ๐ณ|๐ธ๐ด|๐ธ๐ท|๐ธ๐ธ|๐ธ๐น|๐ธ๐ป|๐ธ๐ฝ|๐ธ๐พ|๐ธ๐ฟ|๐น๐ฆ|๐น๐จ|๐น๐ฉ|๐น๐ซ|๐น๐ฌ|๐น๐ญ|๐น๐ฏ|๐น๐ฐ|๐น๐ฑ|๐น๐ฒ|๐น๐ณ|๐น๐ด|๐น๐ท|๐น๐น|๐น๐ป|๐น๐ผ|๐น๐ฟ|๐บ๐ฆ|๐บ๐ฌ|๐บ๐ฒ|๐บ๐ณ|๐บ๐ธ|๐บ๐พ|๐บ๐ฟ|๐ป๐ฆ|๐ป๐จ|๐ป๐ช|๐ป๐ฌ|๐ป๐ฎ|๐ป๐ณ|๐ป๐บ|๐ผ๐ซ|๐ผ๐ธ|๐ฝ๐ฐ|๐พ๐ช|๐พ๐น|๐ฟ๐ฆ|๐ฟ๐ฒ|๐ฟ๐ผ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐ค๐ป|๐ค๐ผ|๐ค๐ฝ|๐ค๐พ|๐ค๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐คฒ๐ป|๐คฒ๐ผ|๐คฒ๐ฝ|๐คฒ๐พ|๐คฒ๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐
๐ป|๐
๐ผ|๐
๐ฝ|๐
๐พ|๐
๐ฟ|๐คณ๐ป|๐คณ๐ผ|๐คณ๐ฝ|๐คณ๐พ|๐คณ๐ฟ|๐ช๐ป|๐ช๐ผ|๐ช๐ฝ|๐ช๐พ|๐ช๐ฟ|๐ฆต๐ป|๐ฆต๐ผ|๐ฆต๐ฝ|๐ฆต๐พ|๐ฆต๐ฟ|๐ฆถ๐ป|๐ฆถ๐ผ|๐ฆถ๐ฝ|๐ฆถ๐พ|๐ฆถ๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ฆป๐ป|๐ฆป๐ผ|๐ฆป๐ฝ|๐ฆป๐พ|๐ฆป๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ถ๐ป|๐ถ๐ผ|๐ถ๐ฝ|๐ถ๐พ|๐ถ๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ฆ๐ป|๐ฆ๐ผ|๐ฆ๐ฝ|๐ฆ๐พ|๐ฆ๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ฑ๐ป|๐ฑ๐ผ|๐ฑ๐ฝ|๐ฑ๐พ|๐ฑ๐ฟ|๐จ๐ป|๐จ๐ผ|๐จ๐ฝ|๐จ๐พ|๐จ๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ฉ๐ป|๐ฉ๐ผ|๐ฉ๐ฝ|๐ฉ๐พ|๐ฉ๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ด๐ป|๐ด๐ผ|๐ด๐ฝ|๐ด๐พ|๐ด๐ฟ|๐ต๐ป|๐ต๐ผ|๐ต๐ฝ|๐ต๐พ|๐ต๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐
๐ป|๐
๐ผ|๐
๐ฝ|๐
๐พ|๐
๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐คฆ๐ป|๐คฆ๐ผ|๐คฆ๐ฝ|๐คฆ๐พ|๐คฆ๐ฟ|๐คท๐ป|๐คท๐ผ|๐คท๐ฝ|๐คท๐พ|๐คท๐ฟ|๐ฎ๐ป|๐ฎ๐ผ|๐ฎ๐ฝ|๐ฎ๐พ|๐ฎ๐ฟ|๐ต๐ป|๐ต๐ผ|๐ต๐ฝ|๐ต๐พ|๐ต๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ฅท๐ป|๐ฅท๐ผ|๐ฅท๐ฝ|๐ฅท๐พ|๐ฅท๐ฟ|๐ท๐ป|๐ท๐ผ|๐ท๐ฝ|๐ท๐พ|๐ท๐ฟ|๐คด๐ป|๐คด๐ผ|๐คด๐ฝ|๐คด๐พ|๐คด๐ฟ|๐ธ๐ป|๐ธ๐ผ|๐ธ๐ฝ|๐ธ๐พ|๐ธ๐ฟ|๐ณ๐ป|๐ณ๐ผ|๐ณ๐ฝ|๐ณ๐พ|๐ณ๐ฟ|๐ฒ๐ป|๐ฒ๐ผ|๐ฒ๐ฝ|๐ฒ๐พ|๐ฒ๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐คต๐ป|๐คต๐ผ|๐คต๐ฝ|๐คต๐พ|๐คต๐ฟ|๐ฐ๐ป|๐ฐ๐ผ|๐ฐ๐ฝ|๐ฐ๐พ|๐ฐ๐ฟ|๐คฐ๐ป|๐คฐ๐ผ|๐คฐ๐ฝ|๐คฐ๐พ|๐คฐ๐ฟ|๐คฑ๐ป|๐คฑ๐ผ|๐คฑ๐ฝ|๐คฑ๐พ|๐คฑ๐ฟ|๐ผ๐ป|๐ผ๐ผ|๐ผ๐ฝ|๐ผ๐พ|๐ผ๐ฟ|๐
๐ป|๐
๐ผ|๐
๐ฝ|๐
๐พ|๐
๐ฟ|๐คถ๐ป|๐คถ๐ผ|๐คถ๐ฝ|๐คถ๐พ|๐คถ๐ฟ|๐ฆธ๐ป|๐ฆธ๐ผ|๐ฆธ๐ฝ|๐ฆธ๐พ|๐ฆธ๐ฟ|๐ฆน๐ป|๐ฆน๐ผ|๐ฆน๐ฝ|๐ฆน๐พ|๐ฆน๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ถ๐ป|๐ถ๐ผ|๐ถ๐ฝ|๐ถ๐พ|๐ถ๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐บ๐ป|๐บ๐ผ|๐บ๐ฝ|๐บ๐พ|๐บ๐ฟ|๐ด๐ป|๐ด๐ผ|๐ด๐ฝ|๐ด๐พ|๐ด๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ฃ๐ป|๐ฃ๐ผ|๐ฃ๐ฝ|๐ฃ๐พ|๐ฃ๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ด๐ป|๐ด๐ผ|๐ด๐ฝ|๐ด๐พ|๐ด๐ฟ|๐ต๐ป|๐ต๐ผ|๐ต๐ฝ|๐ต๐พ|๐ต๐ฟ|๐คธ๐ป|๐คธ๐ผ|๐คธ๐ฝ|๐คธ๐พ|๐คธ๐ฟ|๐คฝ๐ป|๐คฝ๐ผ|๐คฝ๐ฝ|๐คฝ๐พ|๐คฝ๐ฟ|๐คพ๐ป|๐คพ๐ผ|๐คพ๐ฝ|๐คพ๐พ|๐คพ๐ฟ|๐คน๐ป|๐คน๐ผ|๐คน๐ฝ|๐คน๐พ|๐คน๐ฟ|๐ง๐ป|๐ง๐ผ|๐ง๐ฝ|๐ง๐พ|๐ง๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐ญ๐ป|๐ญ๐ผ|๐ญ๐ฝ|๐ญ๐พ|๐ญ๐ฟ|๐ซ๐ป|๐ซ๐ผ|๐ซ๐ฝ|๐ซ๐พ|๐ซ๐ฟ|๐ฌ๐ป|๐ฌ๐ผ|๐ฌ๐ฝ|๐ฌ๐พ|๐ฌ๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|๐๐ป|๐๐ผ|๐๐ฝ|๐๐พ|๐๐ฟ|#๏ธโฃ|0๏ธโฃ|1๏ธโฃ|2๏ธโฃ|3๏ธโฃ|4๏ธโฃ|5๏ธโฃ|6๏ธโฃ|7๏ธโฃ|8๏ธโฃ|9๏ธโฃ|โ๐ป|โ๐ผ|โ๐ฝ|โ๐พ|โ๐ฟ|โ๐ป|โ๐ผ|โ๐ฝ|โ๐พ|โ๐ฟ|โ๐ป|โ๐ผ|โ๐ฝ|โ๐พ|โ๐ฟ|โ๐ป|โ๐ผ|โ๐ฝ|โ๐พ|โ๐ฟ|โ๐ป|โ๐ผ|โ๐ฝ|โ๐พ|โ๐ฟ|โน๐ป|โน๐ผ|โน๐ฝ|โน๐พ|โน๐ฟ|๐|๐|๐|๐|๐|๐
|๐คฃ|๐|๐|๐|๐|๐|๐|๐ฅฐ|๐|๐คฉ|๐|๐|๐|๐|๐ฅฒ|๐|๐|๐|๐คช|๐|๐ค|๐ค|๐คญ|๐คซ|๐ค|๐ค|๐คจ|๐|๐|๐ถ|๐|๐|๐|๐ฌ|๐คฅ|๐|๐|๐ช|๐คค|๐ด|๐ท|๐ค|๐ค|๐คข|๐คฎ|๐คง|๐ฅต|๐ฅถ|๐ฅด|๐ต|๐คฏ|๐ค |๐ฅณ|๐ฅธ|๐|๐ค|๐ง|๐|๐|๐|๐ฎ|๐ฏ|๐ฒ|๐ณ|๐ฅบ|๐ฆ|๐ง|๐จ|๐ฐ|๐ฅ|๐ข|๐ญ|๐ฑ|๐|๐ฃ|๐|๐|๐ฉ|๐ซ|๐ฅฑ|๐ค|๐ก|๐ |๐คฌ|๐|๐ฟ|๐|๐ฉ|๐คก|๐น|๐บ|๐ป|๐ฝ|๐พ|๐ค|๐บ|๐ธ|๐น|๐ป|๐ผ|๐ฝ|๐|๐ฟ|๐พ|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐งก|๐|๐|๐|๐|๐ค|๐ค|๐ค|๐ฏ|๐ข|๐ฅ|๐ซ|๐ฆ|๐จ|๐ณ|๐ฃ|๐ฌ|๐จ|๐ฏ|๐ญ|๐ค|๐|๐ค|๐|๐|๐|๐ค|๐ค|๐ค|๐ค|๐ค|๐ค|๐|๐|๐|๐|๐|๐|๐|๐|๐ค|๐ค|๐|๐|๐|๐คฒ|๐ค|๐|๐
|๐คณ|๐ช|๐ฆพ|๐ฆฟ|๐ฆต|๐ฆถ|๐|๐ฆป|๐|๐ง |๐ซ|๐ซ|๐ฆท|๐ฆด|๐|๐|๐
|๐|๐ถ|๐ง|๐ฆ|๐ง|๐ง|๐ฑ|๐จ|๐ง|๐ฉ|๐ง|๐ด|๐ต|๐|๐|๐
|๐|๐|๐|๐ง|๐|๐คฆ|๐คท|๐ฎ|๐ต|๐|๐ฅท|๐ท|๐คด|๐ธ|๐ณ|๐ฒ|๐ง|๐คต|๐ฐ|๐คฐ|๐คฑ|๐ผ|๐
|๐คถ|๐ฆธ|๐ฆน|๐ง|๐ง|๐ง|๐ง|๐ง|๐ง|๐ง|๐|๐|๐ถ|๐ง|๐ง|๐|๐|๐บ|๐ด|๐ฏ|๐ง|๐ง|๐คบ|๐|๐|๐|๐|๐ฃ|๐|๐|๐ด|๐ต|๐คธ|๐คผ|๐คฝ|๐คพ|๐คน|๐ง|๐|๐|๐ญ|๐ซ|๐ฌ|๐|๐|๐ช|๐ฃ|๐ค|๐ฅ|๐ซ|๐ฃ|๐ฆฐ|๐ฆฑ|๐ฆณ|๐ฆฒ|๐ต|๐|๐ฆ|๐ฆง|๐ถ|๐|๐ฆฎ|๐ฉ|๐บ|๐ฆ|๐ฆ|๐ฑ|๐|๐ฆ|๐ฏ|๐
|๐|๐ด|๐|๐ฆ|๐ฆ|๐ฆ|๐ฆฌ|๐ฎ|๐|๐|๐|๐ท|๐|๐|๐ฝ|๐|๐|๐|๐ช|๐ซ|๐ฆ|๐ฆ|๐|๐ฆฃ|๐ฆ|๐ฆ|๐ญ|๐|๐|๐น|๐ฐ|๐|๐ฟ|๐ฆซ|๐ฆ|๐ฆ|๐ป|๐จ|๐ผ|๐ฆฅ|๐ฆฆ|๐ฆจ|๐ฆ|๐ฆก|๐พ|๐ฆ|๐|๐|๐ฃ|๐ค|๐ฅ|๐ฆ|๐ง|๐|๐ฆ
|๐ฆ|๐ฆข|๐ฆ|๐ฆค|๐ชถ|๐ฆฉ|๐ฆ|๐ฆ|๐ธ|๐|๐ข|๐ฆ|๐|๐ฒ|๐|๐ฆ|๐ฆ|๐ณ|๐|๐ฌ|๐ฆญ|๐|๐ |๐ก|๐ฆ|๐|๐|๐|๐ฆ|๐|๐|๐|๐ชฒ|๐|๐ฆ|๐ชณ|๐ท|๐ธ|๐ฆ|๐ฆ|๐ชฐ|๐ชฑ|๐ฆ |๐|๐ธ|๐ฎ|๐ต|๐น|๐ฅ|๐บ|๐ป|๐ผ|๐ท|๐ฑ|๐ชด|๐ฒ|๐ณ|๐ด|๐ต|๐พ|๐ฟ|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐ฅญ|๐|๐|๐|๐|๐|๐|๐ซ|๐ฅ|๐
|๐ซ|๐ฅฅ|๐ฅ|๐|๐ฅ|๐ฅ|๐ฝ|๐ถ|๐ซ|๐ฅ|๐ฅฌ|๐ฅฆ|๐ง|๐ง
|๐|๐ฅ|๐ฐ|๐|๐ฅ|๐ฅ|๐ซ|๐ฅจ|๐ฅฏ|๐ฅ|๐ง|๐ง|๐|๐|๐ฅฉ|๐ฅ|๐|๐|๐|๐ญ|๐ฅช|๐ฎ|๐ฏ|๐ซ|๐ฅ|๐ง|๐ฅ|๐ณ|๐ฅ|๐ฒ|๐ซ|๐ฅฃ|๐ฅ|๐ฟ|๐ง|๐ง|๐ฅซ|๐ฑ|๐|๐|๐|๐|๐|๐|๐ |๐ข|๐ฃ|๐ค|๐ฅ|๐ฅฎ|๐ก|๐ฅ|๐ฅ |๐ฅก|๐ฆ|๐ฆ|๐ฆ|๐ฆ|๐ฆช|๐ฆ|๐ง|๐จ|๐ฉ|๐ช|๐|๐ฐ|๐ง|๐ฅง|๐ซ|๐ฌ|๐ญ|๐ฎ|๐ฏ|๐ผ|๐ฅ|๐ซ|๐ต|๐ถ|๐พ|๐ท|๐ธ|๐น|๐บ|๐ป|๐ฅ|๐ฅ|๐ฅค|๐ง|๐ง|๐ง|๐ง|๐ฅข|๐ฝ|๐ด|๐ฅ|๐ช|๐บ|๐|๐|๐|๐|๐บ|๐พ|๐งญ|๐|๐|๐ป|๐|๐|๐|๐|๐|๐|๐|๐|๐งฑ|๐ชจ|๐ชต|๐|๐|๐|๐ |๐ก|๐ข|๐ฃ|๐ค|๐ฅ|๐ฆ|๐จ|๐ฉ|๐ช|๐ซ|๐ฌ|๐ญ|๐ฏ|๐ฐ|๐|๐ผ|๐ฝ|๐|๐|๐|๐|๐|๐|๐|๐|๐
|๐|๐|๐|๐ |๐ก|๐ข|๐|๐ช|๐|๐|๐|๐
|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐ป|๐|๐|๐|๐|๐|๐ต|๐ฆฝ|๐ฆผ|๐บ|๐ฒ|๐ด|๐น|๐ผ|๐|๐ฃ|๐ค|๐ข|๐จ|๐ฅ|๐ฆ|๐|๐ง|๐ถ|๐ค|๐ณ|๐ฅ|๐ข|๐ฉ|๐ซ|๐ฌ|๐ช|๐บ|๐|๐|๐ |๐ก|๐ฐ|๐|๐ธ|๐|๐งณ|๐ฐ|๐|๐ง|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐ |๐|๐ก|๐|๐ข|๐|๐ฃ|๐|๐ค|๐|๐ฅ|๐|๐ฆ|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐ก|๐|๐|๐ช|๐|๐ |๐|๐ค|๐ฅ|๐ฆ|๐ง|๐จ|๐ฉ|๐ช|๐ซ|๐ฌ|๐|๐|๐|๐ฅ|๐ง|๐|๐|๐|๐|๐|๐งจ|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐งง|๐|๐|๐|๐|๐ซ|๐|๐|๐
|๐ฅ|๐ฅ|๐ฅ|๐ฅ|๐|๐|๐|๐|๐พ|๐ฅ|๐ณ|๐|๐|๐|๐ฅ|๐|๐ธ|๐ฅ|๐ฅ|๐ฅ
|๐ฃ|๐คฟ|๐ฝ|๐ฟ|๐ท|๐ฅ|๐ฏ|๐ช|๐ช|๐ฑ|๐ฎ|๐ช|๐งฟ|๐ฎ|๐น|๐ฐ|๐ฒ|๐งฉ|๐งธ|๐ช
|๐ช|๐|๐|๐ด|๐ญ|๐ผ|๐จ|๐งต|๐ชก|๐งถ|๐ชข|๐|๐ถ|๐ฅฝ|๐ฅผ|๐ฆบ|๐|๐|๐|๐งฃ|๐งค|๐งฅ|๐งฆ|๐|๐|๐ฅป|๐ฉฑ|๐ฉฒ|๐ฉณ|๐|๐|๐|๐|๐|๐|๐|๐ฉด|๐|๐|๐ฅพ|๐ฅฟ|๐ |๐ก|๐ฉฐ|๐ข|๐|๐|๐ฉ|๐|๐งข|๐ช|๐ฟ|๐|๐|๐|๐|๐|๐|๐|๐ข|๐ฃ|๐ฏ|๐|๐|๐ผ|๐ต|๐ถ|๐|๐|๐|๐ค|๐ง|๐ป|๐ท|๐ช|๐ธ|๐น|๐บ|๐ป|๐ช|๐ฅ|๐ช|๐ฑ|๐ฒ|๐|๐|๐ |๐|๐|๐ป|๐ฅ|๐จ|๐ฑ|๐ฒ|๐ฝ|๐พ|๐ฟ|๐|๐งฎ|๐ฅ|๐|๐ฝ|๐ฌ|๐บ|๐ท|๐ธ|๐น|๐ผ|๐|๐|๐ฏ|๐ก|๐ฆ|๐ฎ|๐ช|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐ฐ|๐|๐|๐|๐ท|๐ฐ|๐ช|๐ด|๐ต|๐ถ|๐ท|๐ธ|๐ณ|๐งพ|๐น|๐ง|๐จ|๐ฉ|๐ค|๐ฅ|๐ฆ|๐ซ|๐ช|๐ฌ|๐ญ|๐ฎ|๐ณ|๐|๐|๐|๐|๐|๐ผ|๐|๐|๐|๐
|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐จ|๐ช|๐ |๐ก|๐ซ|๐ช|๐น|๐ก|๐ช|๐ง|๐ช|๐ฉ|๐|๐ฆฏ|๐|๐ช|๐งฐ|๐งฒ|๐ช|๐งช|๐งซ|๐งฌ|๐ฌ|๐ญ|๐ก|๐|๐ฉธ|๐|๐ฉน|๐ฉบ|๐ช|๐|๐ช|๐ช|๐|๐|๐ช|๐ฝ|๐ช |๐ฟ|๐|๐ชค|๐ช|๐งด|๐งท|๐งน|๐งบ|๐งป|๐ชฃ|๐งผ|๐ชฅ|๐งฝ|๐งฏ|๐|๐ฌ|๐ชฆ|๐ฟ|๐ชง|๐ง|๐ฎ|๐ฐ|๐น|๐บ|๐ป|๐ผ|๐พ|๐|๐|๐|๐
|๐ธ|๐ซ|๐ณ|๐ญ|๐ฏ|๐ฑ|๐ท|๐ต|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐|๐ฏ|๐|๐|๐|๐ผ|๐ฝ|๐ฆ|๐
|๐|๐ถ|๐ณ|๐ด|๐ฑ|๐ฒ|๐ฑ|๐|๐ฐ|๐|๐ |๐ก|๐ข|๐ฃ|๐ค|๐
ฐ|๐|๐
ฑ|๐|๐|๐|๐|๐|๐|๐
พ|๐|๐
ฟ|๐|๐|๐|๐|๐|๐ท|๐ถ|๐ฏ|๐|๐น|๐|๐ฒ|๐|๐ธ|๐ด|๐ณ|๐บ|๐ต|๐ด|๐ |๐ก|๐ข|๐ต|๐ฃ|๐ค|๐ฅ|๐ง|๐จ|๐ฉ|๐ฆ|๐ช|๐ซ|๐ถ|๐ท|๐ธ|๐น|๐บ|๐ป|๐ |๐|๐ณ|๐ฒ|๐|๐ฉ|๐|๐ด|๐ณ|๐ป|๐ผ|๐ฝ|๐พ|๐ฟ|โบ|โน|โ |โฃ|โค|โ|โ|โ|โ|โ|โท|โน|โ|โ|โฐ|โช|โฉ|โฒ|โบ|โจ|โฝ|โ|โต|โด|โ|โ|โณ|โ|โฐ|โฑ|โฒ|โ|โญ|โ|โ
|โ|โ|โ|โฑ|โก|โ|โ|โ|โ|โจ|โฝ|โพ|โณ|โธ|โ |โฅ|โฆ|โฃ|โ|โ|โ|โจ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โฐ|โฑ|โฟ|โ |โ|โข|โฃ|โฌ|โ|โก|โ|โฌ|โ|โฌ
|โ|โ|โ|โฉ|โช|โคด|โคต|โ|โก|โธ|โฏ|โ|โฆ|โช|โฎ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โ|โถ|โฉ|โญ|โฏ|โ|โช|โฎ|โซ|โฌ|โธ|โน|โบ|โ|โ|โ|โง|โ|โ|โ|โ|โพ|โผ|โ|โ|โ|โ|โ|ใฐ|โ|โป|โ|โญ|โ
|โ|โ|โ|โ|โฐ|โฟ|ใฝ|โณ|โด|โ|ยฉ|ยฎ|โข|โน|โ|ใ|ใ|โซ|โช|โฌ|โฌ|โผ|โป|โพ|โฝ|โช|โซ)`
/*compile the pattern string into a regex*/
let emoRegex = new RegExp(emojiPattern, "g")
/*extracting the emojis*/
let emojis = [..."This ๐๐ฉโโ๏ธis the ๐งโโ๏ธtext๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ.".matchAll(emoRegex)];
console.log(emojis)
/*count of emojis*/
let emoCount = [..."This ๐๐ฉโโ๏ธis the ๐งโโ๏ธtext๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ.".matchAll(emoRegex)].length
console.log(emoCount)
/*strip emojis from text*/
let stripped = "This ๐๐ฉโโ๏ธis the ๐งโโ๏ธtext๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ.".replaceAll(emoRegex, "")
console.log(stripped)
/*use the pattern string to build a custom regex*/
let customRegex = new RegExp(".*"+emojiPattern+"{3}$") //match a string ending in 3 emojis
console.log(customRegex.test("yep three here ๐๐ฉโโ๏ธ๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ")) //true
console.log(customRegex.test("nope ๐ฅฃ๐ฉ๐ผโโค๏ธโ๐โ๐ฉ๐ฝ")) //false
You can use regular expression to detect it in input text:
/([\uE000-\uF8FF]|\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])/g
I wrote the following function: containsEmojis(input, includeBasic=true), which checks an input string for emojis according to the list of emojis defined in the Unicode specification version 13 (see https://unicode.org/Public/emoji/13.0/emoji-sequences.txt), and allows to ignore "basic" emojis that can be represented with only 3 bytes.
The snippet below defines the function and runs a few test cases:
/**
* iterates over the code points of an input string and returns true if an emoji is found.
*
* an emoji is found if the hex code for the character is 5 characters starting with "1F",
* or if #includeBasic is true, the character is 4 and starts with one of the prefixes of
* a basic emoji as defined in the Unicode specification version 13
* see https://unicode.org/Public/emoji/13.0/emoji-sequences.txt
*
* #input the string to check
* #includeBasic include also the basic emojis that only take 3 characters
*/
function containsEmojis(input, includeBasic) {
if (typeof includeBasic == "undefined")
includeBasic = true;
for (var c of input) {
var cHex = ("" + c).codePointAt(0).toString(16);
var lHex = cHex.length;
if (lHex > 3) {
var prefix = cHex.substring(0, 2);
if (lHex == 5 && prefix == "1f") {
return true;
}
if (includeBasic && lHex == 4) {
if (["20", "21", "23", "24", "25", "26", "27", "2B", "29", "30", "32"].indexOf(prefix) > -1)
return true;
}
}
}
return false;
}
// can be tested as follows:
var input;
input = "Hello World!";
console.log(input, containsEmojis(input));
input = "Hello ๐!";
console.log(input, containsEmojis(input));
console.log(input, containsEmojis(input, false));
// now try a basic emoji
input = "It sparkles โจ yay!";
console.log(input, containsEmojis(input));
// pass false for includeBasic
console.log(input, containsEmojis(input, false));
another solution I found that worked for me:
const example = '๐ฉโ๐ฉโ๐งโ๐ฆ๐ชฒ';
const regexpEmojiPresentation = /\p{Emoji_Presentation}/gu;
console.log(example.match(regexpEmojiPresentation));
check the emoji like bellow ways
function getEmojiChars(text) {
console.log(text.match(/\ud83c[\udf00-\udfff]|\ud83d[\udc00-\ude4f]|\ud83d[\ude80-\udeff]/g)) ;
}
you will get the array of emoji in the text
So I have a text box on my website and I have coded this to prevent certain words from being used.
window.onload = function() {
var banned = ['MMM', 'XXX'];
document.getElementById('input_1_17').addEventListener('keyup', function(e) {
var text = document.getElementById('input_1_17').value;
for (var x = 0; x < banned.length; x++) {
if (text.toLowerCase().search(banned[x]) !== -1) {
alert(banned[x] + ' is not allowed!');
}
var regExp = new RegExp(banned[x]);
text = text.replace(regExp, '');
}
document.getElementById('input_1_17').value = text;
}, false);
}
The code works perfectly and removes the text from the text box when all the letters typed are lowercase. The problem is when the text contained an uppercase letter it will give the error but the word will not be removed from the text box.
The RegExp is a good direction, just you need some flags (to make it case-insensitive, and global - so replace all occurrences):
var text="Under the xxx\nUnder the XXx\nDarling it's MMM\nDown where it's mmM\nTake it from me";
console.log("Obscene:",text);
var banned=["XXX","MMM"];
banned.forEach(nastiness=>{
text=text.replace(new RegExp(nastiness,"gi"),"");
});
console.log("Okay:",text);
Normally you should use .toLowerCase() with both sides when comparing the strings so they can logically be matched.
But the problem actually comes from the Regex you are using, where you are ignoring case sensitivity, you just need to add the i flag to it:
var regExp = new RegExp(banned[x], 'gi');
text = text.replace(regExp, '');
Note:
Note also that using an alert() in a loop is not recommended, you can change your logic to alert all the matched items in only one alert().
You seem to have been expecting something unreasonable. Lowercase strings will never match strings containing uppercase letters.
Either convert both for comparison or use lowercase banned strings. The former would be more reliable, taking future human error out of the process.
What you can do is actually convert both variables to either all caps or all lowercase.
if (text.toLowerCase().includes(banned[x].toLowerCase())) {
alert(banned[x] + ' is not allowed!');
}
Not tested but it should work. No need to use search since you don't need the index anyway. using includes is cleaner. includes docs
Let's say I have a string: "We.need..to...split.asap". What I would like to do is to split the string by the delimiter ., but I only wish to split by the first . and include any recurring .s in the succeeding token.
Expected output:
["We", "need", ".to", "..split", "asap"]
In other languages, I know that this is possible with a look-behind /(?<!\.)\./ but Javascript unfortunately does not support such a feature.
I am curious to see your answers to this question. Perhaps there is a clever use of look-aheads that presently evades me?
I was considering reversing the string, then re-reversing the tokens, but that seems like too much work for what I am after... plus controversy: How do you reverse a string in place in JavaScript?
Thanks for the help!
Here's a variation of the answer by guest271314 that handles more than two consecutive delimiters:
var text = "We.need.to...split.asap";
var re = /(\.*[^.]+)\./;
var items = text.split(re).filter(function(val) { return val.length > 0; });
It uses the detail that if the split expression includes a capture group, the captured items are included in the returned array. These capture groups are actually the only thing we are interested in; the tokens are all empty strings, which we filter out.
EDIT: Unfortunately there's perhaps one slight bug with this. If the text to be split starts with a delimiter, that will be included in the first token. If that's an issue, it can be remedied with:
var re = /(?:^|(\.*[^.]+))\./;
var items = text.split(re).filter(function(val) { return !!val; });
(I think this regex is ugly and would welcome an improvement.)
You can do this without any lookaheads:
var subject = "We.need.to....split.asap";
var regex = /\.?(\.*[^.]+)/g;
var matches, output = [];
while(matches = regex.exec(subject)) {
output.push(matches[1]);
}
document.write(JSON.stringify(output));
It seemed like it'd work in one line, as it did on https://regex101.com/r/cO1dP3/1, but had to be expanded in the code above because the /g option by default prevents capturing groups from returning with .match (i.e. the correct data was in the capturing groups, but we couldn't immediately access them without doing the above).
See: JavaScript Regex Global Match Groups
An alternative solution with the original one liner (plus one line) is:
document.write(JSON.stringify(
"We.need.to....split.asap".match(/\.?(\.*[^.]+)/g)
.map(function(s) { return s.replace(/^\./, ''); })
));
Take your pick!
Note: This answer can't handle more than 2 consecutive delimiters, since it was written according to the example in the revision 1 of the question, which was not very clear about such cases.
var text = "We.need.to..split.asap";
// split "." if followed by "."
var res = text.split(/\.(?=\.)/).map(function(val, key) {
// if `val[0]` does not begin with "." split "."
// else split "." if not followed by "."
return val[0] !== "." ? val.split(/\./) : val.split(/\.(?!.*\.)/)
});
// concat arrays `res[0]` , `res[1]`
res = res[0].concat(res[1]);
document.write(JSON.stringify(res));
I want to extract only the first fontname out of a URL-string from the Google Webfont Directory. Here are some examples of possible strings and what part should be returned:
fonts.googleapis.com/css?family=Raleway // "Raleway"
fonts.googleapis.com/css?family=Caesar+Dressing // "Caesar Dressing"
fonts.googleapis.com/css?family=Raleway:300,400 // "Raleway"
fonts.googleapis.com/css?family=Raleway|Fondamento // "Raleway"
fonts.googleapis.com/css?family=Caesar+Dressing|Raleway:300,400|Fondamento // "Caesar Dressing"
So sometimes it's just one fontname, sometimes it has a weight indicated by a colon (:) and sometimes there are more fontnames divided by a pipe (|).
I have tried /family=(\S*)[:|]/ but it only matches the strings with :or |. I could do it like this, but it's not a nice solution:
var fontUrl = "fonts.googleapis.com/css?family=Caesar+Dressing|Raleway:300,400|Fondamento";
var fontName = /family=(\S*)/.exec(fontUrl)[1].replace(/\+/, " ");
if (fontName.indexOf(':') != -1){
fontName = fontName.split(':')[0];
}
if (fontName.indexOf('|') != -1){
fontName = fontName.split('|')[0];
}
console.log(fontName);
Is there a nice regex solution to this?
Instead of matching the character that (might) follow the string you want, match only the string you want except those characters:
/family=([^\s:|]*)/
Alternatively, you'd use a lookahead like this:
/family=(\S*?)(?=$|[:|])/
That should be better:
/family=([^:|]*)/
Of course for the + case, you'll have to replace it afterwards (or before maybe).
You can use (choose the i and m modifier in all case):
family=([a-z]+\+?[a-z]+)
or more simply
family=([a-z+]+)
or to avoid matching the + char:
family=([a-z]+)\+?([a-z]+)?
but it is an easyer way to use the second solution, and to replace the + chars with a space after.
try this:
/family\=(\S+?)[\:\|,]{0,2}\S*/ims
No regex is required in this case, unless you are good with regex's or test them thoroughly then you are likely to make mistakes.
var fontUrls = [];
fontUrls.push("fonts.googleapis.com/css?family=Raleway");
fontUrls.push("fonts.googleapis.com/css?family=Caesar+Dressing");
fontUrls.push("fonts.googleapis.com/css?family=Raleway:300,400");
fontUrls.push("fonts.googleapis.com/css?family=Raleway|Fondamento");
fontUrls.push("fonts.googleapis.com/css?family=Caesar+Dressing|Raleway:300,400|Fondamento");
function getFirstFont(url) {
return url.split("=")[1].split("|")[0].split(":")[0];
}
fontUrls.forEach(function (fontUrl) {
console.log(getFirstFont(fontUrl));
});
on jsfiddle
I would like a RegExp that will remove all special characters from a string. I am trying something like this but it doesnโt work in IE7, though it works in Firefox.
var specialChars = "!##$^&%*()+=-[]\/{}|:<>?,.";
for (var i = 0; i < specialChars.length; i++) {
stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
A detailed description of the RegExp would be helpful as well.
var desired = stringToReplace.replace(/[^\w\s]/gi, '')
As was mentioned in the comments it's easier to do this as a whitelist - replace the characters which aren't in your safelist.
The caret (^) character is the negation of the set [...], gi say global and case-insensitive (the latter is a bit redundant but I wanted to mention it) and the safelist in this example is digits, word characters, underscores (\w) and whitespace (\s).
Note that if you still want to exclude a set, including things like slashes and special characters you can do the following:
var outString = sourceString.replace(/[`~!##$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');
take special note that in order to also include the "minus" character, you need to escape it with a backslash like the latter group. if you don't it will also select 0-9 which is probably undesired.
Plain Javascript regex does not handle Unicode letters.
Do not use [^\w\s], this will remove letters with accents (like ร รจรฉรฌรฒรน), not to mention to Cyrillic or Chinese, letters coming from such languages will be completed removed.
You really don't want remove these letters together with all the special characters. You have two chances:
Add in your regex all the special characters you don't want remove, for example: [^รจรฉรฒร รนรฌ\w\s].
Have a look at xregexp.com. XRegExp adds base support for Unicode matching via the \p{...} syntax.
var str = "ะะถะฐะบ::: rรฉsd,$%& adรนf"
var search = XRegExp('([^?<first>\\pL ]+)');
var res = XRegExp.replace(str, search, '',"all");
console.log(res); // returns "ะะถะฐะบ::: resd,adf"
console.log(str.replace(/[^\w\s]/gi, '') ); // returns " rsd adf"
console.log(str.replace(/[^\wรจรฉรฒร รนรฌ\s]/gi, '') ); // returns " rรฉsd adรนf"
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>
using \W or [a-z0-9] regex won't work for non english languages like chinese etc.,
It's better to use all special characters in regex and exclude them from given string
str.replace(/[~`!##$%^&*()+={}\[\];:\'\"<>.,\/\\\?-_]/g, '');
The first solution does not work for any UTF-8 alphabet. (It will cut text such as ะะถะฐะบ). I have managed to create a function which does not use RegExp and use good UTF-8 support in the JavaScript engine. The idea is simple if a symbol is equal in uppercase and lowercase it is a special character. The only exception is made for whitespace.
function removeSpecials(str) {
var lower = str.toLowerCase();
var upper = str.toUpperCase();
var res = "";
for(var i=0; i<lower.length; ++i) {
if(lower[i] != upper[i] || lower[i].trim() === '')
res += str[i];
}
return res;
}
Update: Please note, that this solution works only for languages where there are small and capital letters. In languages like Chinese, this won't work.
Update 2: I came to the original solution when I was working on a fuzzy search. If you also trying to remove special characters to implement search functionality, there is a better approach. Use any transliteration library which will produce you string only from Latin characters and then the simple Regexp will do all magic of removing special characters. (This will work for Chinese also and you also will receive side benefits by making Tromsรธ == Tromso).
I use RegexBuddy for debbuging my regexes it has almost all languages very usefull. Than copy/paste for the targeted language.
Terrific tool and not very expensive.
So I copy/pasted your regex and your issue is that [,] are special characters in regex, so you need to escape them. So the regex should be : /!##$^&%*()+=-[\x5B\x5D]\/{}|:<>?,./im
str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "") I did sth like this.
But there is some people who did it much easier like str.replace(/\W_/g,"");
#Seagull anwser (https://stackoverflow.com/a/26482552/4556619)
looks good but you get undefined string in result when there are some special (turkish) characters. See example below.
let str="bษnรถvลษyi ๐ะฟััะฟััะฝัะน ฤฐdรฤ";
i slightly improve it and patch with undefined check.
function removeSpecials(str) {
let lower = str.toLowerCase();
let upper = str.toUpperCase();
let res = "",i=0,n=lower.length,t;
for(i; i<n; ++i) {
if(lower[i] !== upper[i] || lower[i].trim() === ''){
t=str[i];
if(t!==undefined){
res +=t;
}
}
}
return res;
}
text.replace(/[`~!##$%^*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');
why dont you do something like:
re = /^[a-z0-9 ]$/i;
var isValid = re.test(yourInput);
to check if your input contain any special char