它是表情符号吗?


17

我最近一直在使用此iOS应用程序,遇到一个(相当容易解决的)问题:如何确定我的字符串是否仅包含表情符号?

好吧,今天就是你的工作!

输入项

一个字符串。如果Unicode字符的存在对您有问题,则可以使用其他合理的格式。如果您做的事情与常规字符串不同,请说明您的操作。

输出量

如果输入字符串仅包含表情符号,则打印或返回真实值;如果包含表情符号以外的任何字符,则打印或返回虚假值。

等一下...什么是表情符号?😅

表情符号是属于以下范围的字符:

0x1F600...0x1F64F  // Emoticons
0x1F300...0x1F5FF  // Misc Symbols and Pictographs
0x1F680...0x1F6FF  // Transport and Map
0x2600...0x26FF    // Misc symbols
0x2700...0x27BF    // Dingbats
0xFE00...0xFE0F    // Variation Selectors

(我认为)

这是🔹code golf🔹,因此以字节为单位的最短代码胜出❕

测试用例

"Is it an emoji? 🤔" -> False
"🔹code-golf🔹" -> False
"😮 😥 😨 😩 😪" -> False
"I have no fancy emojis :(" -> False

"😎" -> True
"😊😘" -> True

对于您那些看不见表情符号的可怜人,这是测试用例的图像


2
也许包括一个看不见表情符号的人的版本(也许是图片)?;-)
ETHproductions 2016年

@ETHproductions,您是否建议我链接到测试用例的照片或其他内容?
丹尼尔(Daniel)

好吧,表情符号遍布整个问题,但是我想唯一真正重要的表情符号是在测试用例中,因此仅测试用例的图像就可以工作。
ETHproductions's

@ETHproductions,我在测试用例的照片上添加了链接
Daniel

输入可以是Unicode代码点的数字数组吗?另外,输入可以包含什么范围的字符/数字?
路易斯·门多

Answers:


2

红宝石61 56 + 1 = 62 57 47字节

使用该-n标志并接受来自STDIN的输入。版画0的truthy和nil对falsy。

-5个字节,因为我出于某种原因最初认为正则表达式解决方案不起作用???

来自NieDzejkob的 -10个字节,用于注意我错过的代码点重叠:o

p$_=~/^[🌀-🙏🚀-🛿☀-➿︀-︀️]*$/

在线尝试!


1
如果在正则表达式中合并两个范围,则为47个字节
NieDzejkob

1
是47岁,不是吗?
Asone Tuhid

是的,我在收到@NieDzejkob的建议后忘了更新分数
Value Ink

10

表情符号,179字节

🍇a🍨🐚🚂➡🚂🔂n🍡a🍇🍊🎉🎉◀n 9728🎊▶n 10175◀n 65024🎉🎉🎊▶n 65039◀n 127744🎊▶n 128591◀n 128640▶n 128767🍇🍎0🍉🍉🍎1🍉

带有表示代码点的整数列表并返回1或0的可调用对象。

在线尝试!

表情符号,187字节

🍇a🔡➡👌🔂i🍡a🍇🍦n🚂i🍊🎉🎉◀n 9728🎊▶n 10175◀n 65024🎉🎉🎊▶n 65039◀n 127744🎊▶n 128591◀n 128640▶n 128767🍇🍎👎🍉🍉🍎👍🍉

带字符串并返回布尔值的可调用对象。

在线尝试!

脱节和解释

👴 A callable that takes a 🔡 called input and returns a 👌
🍇 input 🔡 ➡ 👌
 👴 For each character in input
 🔂 character 🍡 input 🍇
  👴 Create a frozen called n containing the unicode codepoint of character
  🍦 n 🚂 character
  👴 If the value is in one of specific ranges, return 👎 (if the current character is not an emoji)
  🍊🎉🎉◀n 9728🎊▶n 10175◀n 65024🎉🎉🎊▶n 65039◀n 127744🎊▶n 128591◀n 128640▶n 128767🍇
   🍎 👎
  🍉
 🍉
 👴 Since we're here, all characters are an emoji, so return 👍
 🍎👍
🍉

在线尝试!


1

JavaScript,83 61字节

-22字节的感谢@Shaggy

s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2

演示版

f=s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2

document.writeln(f("🔹code-golf🔹")) //false
document.writeln(f("😮 😥 😨 😩 😪")) //false
document.writeln(f("I have no fancy emojis :(")) //false
document.writeln(f("😎")) //true
document.writeln(f("😊😘")) //true


1
61个字节:s=>(s.match(/\ud83d[\ude00-\ude4f]/g)||"").length==s.length/2
粗野的

嗯,这是怎么工作的?正则表达式未指定任何表情符号的代码点...
NieDzejkob

@NieDzejkob我相信JS对Unicode使用UTF-16,所以我想这些是这些代码点的UTF-16字节表示形式。答案是不完整的,虽然,它失败了🛂🚀♔☺☠🏐🎅🌝等等,所有这些都应该是truthy。似乎只检查OP提到的六个范围中的一个。
sundar-恢复莫妮卡

1

Python,87个字节

lambda x:re.match('^[😀-🙏🌀-🗿🚀-🛿☀-➿︀-︀️]*$',x)and 1
import re

在线尝试!

返回1真实值和None虚假值。


我“借用了”您的正则表达式,希望您不要介意;)
HyperNeutrino

自从我告诉Value Ink以来,我也会告诉您-正则表达式中的前两个组可以由于相邻的代码点而合并:🌀-🙏
NieDzejkob

1

质子 54字节

map(/[🌀-🙏🚀-🛿☀-➿︀-︀️]/.match)+all

在线尝试!

-9字节(3个字符),感谢NieDzejkob

“借用” Uriel的正则表达式:P由于Proton的晦涩功能和正则表达式文字,此代码更短


正如我告诉Value Ink一样,由于相邻的代码点,正则表达式中的前两个组可以合并:🌀-🙏
NieDzejkob

@NieDzejkob到底是什么?它给了我错误:tio.run
##KyjKL8nP@59m@


0

QuadR,47字节

''≡⍵
[🌀-🙏🚀-🛿☀-➿︀-︀️]

在线尝试!

是...

''≡⍵ 一个与以下情况下的结果相同的空字符串:

[🌀-🙏🚀-🛿☀-➿︀-︀️] 所有表情符号都是…

 一无所有

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.