如何使用Dart在Flutter中检测字符串中的表情符号?

0s0u357o  于 2023-05-11  发布在  Flutter
关注(0)|答案(4)|浏览(549)

我想取一个String值,并找出其中是否有任何表情符号。可能是一些regex魔术,但不知道如何做到这一点。

zhte4eai

zhte4eai1#

也在找同样的东西。
找到了这个新发布的包:https://pub.dartlang.org/packages/flutter_emoji
MIT许可证。
查看源代码,似乎这是使用的正则表达式:

/// 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])');

我希望这些信息能有所帮助。

iyr7buue

iyr7buue2#

由于@ninnepinne的答案不起作用,因为它会包括一些汉字,如“.”(中文中的“.”是很常见的),我必须找到另一种解决方案。
经过一些研究,我发现this answer对javascript很有帮助。
在dart中,我们可以使用以下内容:

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]))');
chy5wohz

chy5wohz3#

使用此功能可以避免输入中的所有类型的特殊字符和表情符号-

inputFormatters: [WhitelistingTextInputFormatter(RegExp(r'[a-zA-Z0-9]'))],
5ktev3wc

5ktev3wc4#

我将flutter_emoji分叉为dart_emoji,它有一个方法:

// Check if text contains only emojis
EmojiUtil.hasTextOnlyEmoji("👋"); // returns true
EmojiUtil.hasTextOnlyEmoji("👋 Hello"); // returns false
flutter-emojidart-emoji
还在维护?
空安全性
纯 dart 套餐
更新Emoji

https://pub.dev/packages/dart_emoji

相关问题