2

我想使用Regex将表情符号限制在u2600 -u26FF范围的文本框中。

我试过这个,但失败了。

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

我想限制用户在 WP8 中添加表情符号

4

1 回答 1

4

因为 .NET 不支持正则表达式中的代理对。您必须手动分解它们。为了清楚起见,char.NET 中的 a 是 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 DF00toD83C DFFFD83D uDC00toD83D 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]");
于 2013-08-07T13:18:59.317 回答