8

I want to take a String value, and find out if there are any emojis in it. Might be some regex magic but not sure how to do that.

Remo Bajwa
  • 513
  • 6
  • 19
  • Use this regrex val regrex= RegExp REGEX_EMOJI = RegExp(r'(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])'); – harsh bangari May 11 '23 at 08:05

4 Answers4

8

Was looking for the same thing.

Found this newly published package: https://pub.dartlang.org/packages/flutter_emoji

MIT license.

Looking at the source code it seems like this is the regex used:

/// A tweak regexp to pass all Emoji Unicode 11.0
/// TODO: improve this version, since it does not match the graphical bytes.
static final RegExp REGEX_EMOJI = RegExp(r'(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])');

I hope this information can be helpful.

ninnepinne
  • 351
  • 3
  • 9
  • 1
    It does not work because it will include some Chinese characters such as "。" (the "." in Chinese which is very common) – ch271828n Jan 25 '21 at 02:25
  • I'm not sure why but I had to change the variable name to camel case to get this to work: 'regexEmoji' instead of 'REGEX_EMOJI' . – Rivers Cuomo Feb 16 '21 at 13:30
  • I was able to skip the '。' character, as well as other Japanese characters, by omitting one part of the regex: '[\u2000-\u3300]'. So the full revised regex is: final RegExp regexEmoji = RegExp(r'(\u00a9|\u00ae|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])'); Here is a unicode Kanji table: http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml – Rivers Cuomo Feb 16 '21 at 13:46
  • The revised regex from @RiversCuomo excludes some common emoji. For example, it does not include the 'heart' or 'pencil' emoji. – Nathan Dudley Jun 02 '22 at 03:18
5

Since @ninnepinne's answer does not work, because it will include some Chinese characters such as "。" (the "." in Chinese which is very common), I have to find another solution.

After some research, I find this answer about javascript quite helpful.

In dart, we can use the following:

var regex = RegExp(
      r'(?:[\u00A9\u00AE\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\u2660\u2663\u2665-\u2666\u2668\u267B\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-\uDEF6]|\uD83E[\uDD10-\uDD1E\uDD20-\uDD27\uDD30\uDD33-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4B\uDD50-\uDD5E\uDD80-\uDD91\uDDC0]))');
ch271828n
  • 15,854
  • 5
  • 53
  • 88
  • Thank you, this is the correct answer, this pattern is covering the emojis and not false-alarming spaces or characters like " ’ " – evanca Oct 19 '22 at 09:32
1

use this to avoid all types of special characters and emoji in input in a flutter-

inputFormatters: [WhitelistingTextInputFormatter(RegExp(r'[a-zA-Z0-9]'))],
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103
s.j
  • 621
  • 6
  • 16
1

I forked flutter_emoji to dart_emoji and it has a method for this:

// Check if text contains only emojis
EmojiUtil.hasTextOnlyEmoji(""); // returns true
EmojiUtil.hasTextOnlyEmoji(" Hello"); // returns false
  flutter-emoji dart-emoji
Still maintained?
Null Safety
Pure Dart Package
Updated emojis

https://pub.dev/packages/dart_emoji

Nils Reichardt
  • 3,195
  • 2
  • 18
  • 28