如何限制表情符号范围u2600-u26FF为文本框

时间:2013-08-07 11:56:57

标签: c# regex windows-phone-7 windows-phone-8

我想使用正则表达式 u2600-u26FF 的文本框中限制 Emojis

我试过了,但失败了。

private static readonly Regex regexEmoji = new Regex(@"[\u1F600-\u1F6FF]|[\u2600-\u26FF]");

我想限制用户在WP8中添加Emojis

提前致谢。

1 个答案:

答案 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 DF00D83C DFFFD83D uDC00D83D 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]");