runliuv

runliuv@cnblogs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

C#.NET FRAMEWORK .NET CORE .NET6 .NET8 判断是否Emoji

 

工具类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleThreadTimer
{
    public class EmojiUtil
    {
        /// <summary>
        /// 判断String中是否包含Emoji
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool ContainsEmoji(string source)
        {
            if (string.IsNullOrWhiteSpace(source))
            {
                return false;
            }
            int len = source.Length;
            foreach (char item in source)
            {
                if (!IsEmojiCharacter(item))
                {

                    //如果不能匹配,则该字符是Emoji表情
                    return true;
                }
            }
            return false;
        }


        /// <summary>
        ///根据char判断是否是Emoji
        /// </summary>
        /// <param name="codePoint"></param>
        /// <returns></returns>
        private static bool IsEmojiCharacter(char codePoint)
        {
            return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)
                             || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
                             || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
                             || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
        }

        public static string RemoveEmoji(string source)
        {
            if (string.IsNullOrWhiteSpace(source))
            {
                return "1";
            }
            StringBuilder sc = new StringBuilder();
            int len = source.Length;
            foreach (char item in source)
            {
                if (!IsEmojiCharacter(item))
                {
                    continue; // IsEmojiCharacter 等于false,是Emoji
                }
                sc.Append(item);
            }
            string finalStr= sc.ToString();
            if (string.IsNullOrWhiteSpace(finalStr))
            {
                return "1";
            }
            return finalStr;
        }
    }
}

 

使用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleThreadTimer
{
    class Program
    {
        static void Main(string[] args)
        {
            string testString1 = "条码支付-pos-蜜雪冷饮-    新贝特中国汉堡🍔-000325531004654124070216494150";
            string testString2 = "No emojis here.";

            Console.WriteLine(EmojiUtil.ContainsEmoji  (testString1) ? "Contains Emoji" : "No Emoji");
            Console.WriteLine(EmojiUtil.ContainsEmoji(testString2) ? "Contains Emoji" : "No Emoji");
            Console.ReadKey();
        }

        static bool ContainsEmoji(string s)
        {
            // 这是一个简化的正则表达式,用于匹配多个常见的Emoji范围。  
            // 注意:这可能需要根据最新的Unicode标准进行调整。  
            string emojiPattern = @"[\uD83C\uDF00-\uD83D\uDDFF\u2600-\u27BF]+";
            Regex regex = new Regex(emojiPattern);

            // 使用Regex的IsMatch方法检查字符串中是否包含Emoji  
            return regex.IsMatch(s);
        }
    }
}

 

--

posted on 2024-07-03 10:46  runliuv  阅读(8)  评论(0编辑  收藏  举报