检查字符串是否只包含表情符号 - Javascript

3

我想检查字符串是否仅包含表情符号, 它不应该包含字母、数字或特殊字符。

对于一个表情符号,它可以正常工作,但是对于多个表情符号,它会返回false,请查看代码片段。

var emoji_regex = /^(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])$/;

const emo_test = str => console.log(emoji_regex.test(str));

emo_test(""); //true
emo_test("hello"); //false
emo_test("9034"); //false
emo_test("$z5##"); //false
emo_test(""); //true

对于最后一个,它只包含表情符号,因此应该返回true,但实际上返回的是false,有任何解决方法吗?

在组后面添加一个+(一个或多个匹配项)。var emoji_regex = /^(?: .... )+$/; - Tibrogargan
1个回答

10

You need to add + or * before $ in your regex. like the following.

var emoji_regex = /^(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])+$/;

const emo_test = str => console.log(emoji_regex.test(str));

emo_test(""); //true
emo_test("hello"); //false
emo_test("9034"); //false
emo_test("$z5##"); //false
emo_test(""); //true


3
有一个bug:emo_test("[");返回true,但期望的是false。请注意不改变原意,尽可能使翻译通俗易懂。 - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接