计算表情符号的字符长度?

Ale*_*Vay 11 javascript php validation emoji

我想在新用户在我的页面注册时验证名称.其中一项检查是字符限制是否超过100.

但是,因为像❤️这样的单个表情符号(那些实际上是4个表情符号在一起?看截图)算得多于1个字符我有问题来验证名称.我在名字中允许使用表情符号,因为现在有一颗心,星或类似的东西很常见,但我不想允许超过100个字符的名字.

所以我有这个问题:

  • 如何计算一个表情符号作为所有表情符号中的一个字符(如果它甚至可能)?

PS:我在谈论一个php解决方案,但我也会接受Javascript,即使我不喜欢它.

编辑:我的示例表情符号似乎是这个字符串: \ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69

请注意这个问题的提到的屏幕截图:

这个问题的截图,请注意表情符号输出.

Eva*_*kas 10

作为一个潜在的JavaScript解决方案(如果你不介意添加一个库),Lodash已经在他们的toArray模块中解决了这个问题.

例如,

_.toArray('12').length; // --> 3
Run Code Online (Sandbox Code Playgroud)

或者,如果你想从字符串中敲掉几个任意字符,你就可以操作并重新加入数组,例如:

_.toArray("trimToEightGlyphs").splice(0,8).join(''); // --> 'trimToE'
Run Code Online (Sandbox Code Playgroud)


Fed*_*kun 8

Unicode将抽象字符定义为代码点,但允许在屏幕上呈现它的是字体.字体是图形形状的集合,称为字形,它们是代码点或代码点序列的直观表示.显示为单个图形单元的一个或多个代码点的序列称为字形.

如果你需要以字形为单位获得长度(而不是字符,就像mb_strlen那样),你可以使用grapheme_strlen:

$emoji = "\u{1F469}\u{200D}\u{2764}\u{FE0F}\u{200D}\u{1F48B}\u{200D}\u{1F469}";
echo $emoji , " : " , strlen($emoji) , "\n"; // 27, count bytes
echo $emoji , " : " , mb_strlen($emoji) , "\n"; // 8, count characters
echo $emoji , " : " , grapheme_strlen($emoji) , "\n"; // 1, count grapheme units
Run Code Online (Sandbox Code Playgroud)

https://3v4l.org/KSSl4