diff --git a/README.md b/README.md
index 961b50d9a..976f80416 100644
--- a/README.md
+++ b/README.md
@@ -111,6 +111,7 @@ Validator | Description
**isDivisibleBy(str, number)** | check if the string is a number that's divisible by another.
**isEAN(str)** | check if the string is an EAN (European Article Number).
**isEmail(str [, options])** | check if the string is an email.
`options` is an object which defaults to `{ allow_display_name: false, require_display_name: false, allow_utf8_local_part: true, require_tld: true, allow_ip_domain: false, domain_specific_validation: false, blacklisted_chars: '', host_blacklist: [] }`. If `allow_display_name` is set to true, the validator will also match `Display Name `. If `require_display_name` is set to true, the validator will reject strings without the format `Display Name `. If `allow_utf8_local_part` is set to false, the validator will not allow any non-English UTF8 character in email address' local part. If `require_tld` is set to false, e-mail addresses without having TLD in their domain will also be matched. If `ignore_max_length` is set to true, the validator will not check for the standard max length of an email. If `allow_ip_domain` is set to true, the validator will allow IP addresses in the host part. If `domain_specific_validation` is true, some additional validation will be enabled, e.g. disallowing certain syntactically valid email addresses that are rejected by GMail. If `blacklisted_chars` receives a string, then the validator will reject emails that include any of the characters in the string, in the name part. If `host_blacklist` is set to an array of strings and the part of the email after the `@` symbol matches one of the strings defined in it, the validation fails.
+**isEmoji(str)** | check if the string contains any emoji (Unicode symbols).
**isEmpty(str [, options])** | check if the string has a length of zero.
`options` is an object which defaults to `{ ignore_whitespace:false }`.
**isEthereumAddress(str)** | check if the string is an [Ethereum](https://ethereum.org/) address using basic regex. Does not validate address checksums.
**isFloat(str [, options])** | check if the string is a float.
`options` is an object which can contain the keys `min`, `max`, `gt`, and/or `lt` to validate the float is within boundaries (e.g. `{ min: 7.22, max: 9.55 }`) it also has `locale` as an option.
`min` and `max` are equivalent to 'greater or equal' and 'less or equal', respectively while `gt` and `lt` are their strict counterparts.
`locale` determine the decimal separator and is one of `['ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LB', 'ar-LY', 'ar-MA', 'ar-QA', 'ar-QM', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-TN', 'ar-YE', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'en-AU', 'en-GB', 'en-HK', 'en-IN', 'en-NZ', 'en-US', 'en-ZA', 'en-ZM', 'es-ES', 'fr-CA', 'fr-FR', 'hu-HU', 'it-IT', 'nb-NO', 'nl-NL', 'nn-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS', 'sr-RS@latin', 'sv-SE', 'tr-TR', 'uk-UA']`. Locale list is `validator.isFloatLocales`.
diff --git a/src/index.js b/src/index.js
index 42e1e8b69..840c192f0 100644
--- a/src/index.js
+++ b/src/index.js
@@ -123,6 +123,8 @@ import isStrongPassword from './lib/isStrongPassword';
import isVAT from './lib/isVAT';
+import isEmoji from './lib/isEmoji';
+
const version = '13.7.0';
const validator = {
@@ -141,6 +143,7 @@ const validator = {
isIPRange,
isFQDN,
isBoolean,
+ isEmoji,
isIBAN,
isBIC,
isAlpha,
diff --git a/src/lib/isEmoji.js b/src/lib/isEmoji.js
new file mode 100644
index 000000000..79509e374
--- /dev/null
+++ b/src/lib/isEmoji.js
@@ -0,0 +1,11 @@
+export default function isEmoji(str) {
+ const 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
+ ];
+ if (str.match(ranges.join('|'))) {
+ return true;
+ }
+ return false;
+}