steppinghat / emoji-detector
检测和验证输入字符串中的emoji
Requires
- php: >=7.1
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^5.4
README
如果你的输入字符串充满了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