Skip to content

Instantly share code, notes, and snippets.

@chris--young
Created August 4, 2016 20:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chris--young/178f0c06cc25c0926626d337129ab954 to your computer and use it in GitHub Desktop.
Save chris--young/178f0c06cc25c0926626d337129ab954 to your computer and use it in GitHub Desktop.
'use strict'
const blocks = {
symbols: '[\u2000-\u2bff]',
cjk: '[\u2e80-\u9fff]',
surrogates: '[\ud800-\udbff]',
selectors: '[\ufe00-\ufe0f]'
};
const valid = new RegExp(`^${Object.keys(blocks).map(key => blocks[key]).join('|')}$`);
function emoji(char) {
const buffer = new Buffer(char);
let length = 0;
if (buffer[0] >> 5 === 6)
length = 2;
if (buffer[0] >> 4 === 14)
length = 3;
if (buffer[0] >> 3 === 30)
length = 4;
if (!length)
return false;
for (let index = 1; index < length; index++)
if (buffer[index] >> 6 !== 2)
if (!valid.test(buffer[index].toString()))
return false;
return true;
}
console.log(emoji('😀')); // true
console.log(emoji('x')); // false
console.log(emoji('🇦🇩')); // true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment