我想使用正则表达式在 u2600-u26FF 的文本框中限制 Emojis 。
我试过了,但失败了。
private static readonly Regex regexEmoji = new Regex(@"[\u1F600-\u1F6FF]|[\u2600-\u26FF]");
我想限制用户在WP8中添加Emojis
提前致谢。
答案 0 :(得分:4)
因为.NET不支持Regexes中的代理对。你必须手动分解它们。为清楚起见,.NET中的char
为16位,但1F600
需要两个char
。因此,解决方案是“手动”分解它们。
private static readonly Regex regexEmoji = new Regex(@"\uD83D[\uDE00-\uDEFF]|[\u2600-\u26FF]");
我希望我已正确分解它们。
我使用过这个网站:http://www.trigeminal.com/16to32AndBack.asp
分解低和高范围\u1F600 == \uD83D \uDE00
,\u1F6FF == \uD83D \uDEFF
。代理对的第一部分是“固定的”:\uD83D
,另一部分是范围。
示例代码(http://ideone.com/0o6qbt)
string str = "Hello world ☀⛿"; // 1F600 GRINNING FACE, 1F64F PERSON WITH FOLDED HANDS, 2600 BLACK SUN WITH RAYS, 26FF WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
Regex regexEmoji = new Regex(@"\uD83D[\uDE00-\uDEFF]|[\u2600-\u26FF]");
MatchCollection matches = regexEmoji.Matches(str);
int count = matches.Count;
Console.WriteLine(count);
如果您想要范围1F300-1F6FF
... D83C DF00
到D83C DFFF
和D83D uDC00
到D83D DEFF
string str = "Hello world ☀⛿"; // 1F300 CYCLONE, 1F600 GRINNING FACE, 1F64F PERSON WITH FOLDED HANDS, 2600 BLACK SUN WITH RAYS, 26FF WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
Regex regexEmoji = new Regex(@"\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDEFF]|[\u2600-\u26FF]");