steppinghat/emoji-detector

检测和验证输入字符串中的emoji

1.6.0 2024-09-06 07:33 UTC

This package is auto-updated.

Last update: 2024-09-10 01:12:28 UTC


README

Latest Stable Version Total Downloads License Build Status Unicode Version

如果你的输入字符串充满了emoji,并想了解每个emoji的详细信息?想要建立一个简单的方式来验证输入数据中的emoji?

这就是 👏 你 👏 想要的 👏 库 👏!

这个库是做什么的?

这个库简单地解析输入字符串,并返回关于字符串中存在的emoji的相关信息列表。它目前支持emoji标准的15.1版本。

安装

使用composer安装此库

$ composer require steppinghat/emoji-detector

ℹ️ 我们建议使用尖括号版本范围(^)(以下将说明原因)

更新

Unicode版本的更新将始终以新的次要版本形式发布。我们建议使用(^)尖括号版本范围,以便在运行composer update时自动支持项目中的新emoji。

任何重大更改将以新的主要版本形式发布,而补丁将以新的补丁版本形式发布。

使用方法

模型

对于大多数输出,库将提供一个包含关于每个emoji的所有相关信息的EmojiInfo对象。该对象将包含以下信息

所有这些属性都是受保护的,但可以通过相应的getter和setter来访问。例如getCategory()getSkinTone()

emoji检测

<?php

require_once('vendor/autoload.php');

use SteppingHat\EmojiDetector\EmojiDetector;

$input = "Hello 👋 world!";
$detector = new EmojiDetector();
$emojis = $detector->detect($input);

print_r($emojis);

以下是检测器的最常见用法示例,返回一个包含关于输入字符串中每个找到的emoji的详细信息的对象数组。

Array
(
    [0] => SteppingHat\EmojiDetector\Model\EmojiInfo Object
        (
            [emoji:protected] => 👋
            [name:protected] => waving hand
            [shortName:protected] => hand-fingers-open
            [category:protected] => People & Body
            [skinTone:protected] =>
            [hexCodes:protected] => Array
                (
                    [0] => 1F44B
                )

            [offset:protected] => 6
            [mbOffset:protected] => 6
        )

)

该库完全支持使用ZWJ(Zero Width Joiner)字符的复杂emoji。

<?php

require_once('vendor/autoload.php');

use SteppingHat\EmojiDetector\EmojiDetector;

$input = "I ❤️ to 👨‍💻";
$detector = new EmojiDetector();
$emojis = $detector->detect($input);

print_r($emojis);

上面的代码将产生以下输出

Array
(
    [0] => SteppingHat\EmojiDetector\Model\EmojiInfo Object
        (
            [emoji:protected] => ❤️
            [name:protected] => red heart
            [shortName:protected] => emotion
            [category:protected] => Smileys & Emotion
            [skinTone:protected] => 
            [hexCodes:protected] => Array
                (
                    [0] => 2764
                    [1] => FE0F
                )

            [offset:protected] => 2
            [mbOffset:protected] => 2
        )

    [1] => SteppingHat\EmojiDetector\Model\EmojiInfo Object
        (
            [emoji:protected] => 👨‍💻
            [name:protected] => man technologist
            [shortName:protected] => person-role
            [category:protected] => People & Body
            [skinTone:protected] => 
            [hexCodes:protected] => Array
                (
                    [0] => 1F468
                    [1] => 200D
                    [2] => 1F4BB
                )

            [offset:protected] => 13
            [mbOffset:protected] => 9
        )

)

检测不同的emoji

如果你只想检测字符串中的不同emoji,可以使用detectDistinct方法。这将返回一个包含输入字符串中找到的不同emoji的数组和该emoji首次出现的位置。

<?php

require_once('vendor/autoload.php');

use SteppingHat\EmojiDetector\EmojiDetector;

$detector = new EmojiDetector();

$emojis = $detector->detectDistinct("WHAT IS A KILOMETER 🗣🗣🗣🦅🦅🦅")

print_r($emojis);

上面的代码将产生以下输出

(
    [0] => SteppingHat\EmojiDetector\Model\EmojiInfo Object
        (
            [emoji:protected] => 🗣
            [name:protected] => speaking head
            [shortName:protected] => person-symbol
            [category:protected] => People & Body
            [skinTone:protected] => 
            [hexCodes:protected] => Array
                (
                    [0] => 1F5E3
                )

            [offset:protected] => 20
            [mbOffset:protected] => 20
        )

    [1] => SteppingHat\EmojiDetector\Model\EmojiInfo Object
        (
            [emoji:protected] => 🦅
            [name:protected] => eagle
            [shortName:protected] => animal-bird
            [category:protected] => Animals & Nature
            [skinTone:protected] => 
            [hexCodes:protected] => Array
                (
                    [0] => 1F985
                )

            [offset:protected] => 32
            [mbOffset:protected] => 23
        )

)

测试单个emoji

有时测试一个输入字符串是否仅包含单个emoji很有用。

<?php

require_once('vendor/autoload.php');

use SteppingHat\EmojiDetector\EmojiDetector;

$detector = new EmojiDetector();

$detector->isSingleEmoji("💩"); // Returns TRUE
$detector->isSingleEmoji("Time to dance 🌚"); // Returns FALSE
$detector->isSingleEmoji("🍆🍒"); // Returns FALSE

测试字符串是否全部为emoji

类似于调用isSingleEmoji,调用isEmojiString将检查一个字符串是否只包含emoji。

<?php

require_once('vendor/autoload.php')

use SteppingHat\EmojiDetector\EmojiDetector;

$detector = new EmojiDetector();

$detector->isEmojiString("😂😂😂"); // Returns TRUE
$detector->isEmojiString("🏎️💨") // Returns TRUE
$detector->isEmojiString("Deez nuts 🥜") // Returns FALSE

测试

包含一小套测试用例,用于确保基本库功能按预期工作。可以通过运行以下命令来启动这些测试

$ composer test

许可证

由Javan Eskander用❤️制作

可在MIT许可证下使用。

emoji数据来源于amio/emoji.json