2

Regexを使用してu2600-u26FFの範囲のテキスト ボックスでEmojisを制限したいと思います。

これを試しましたが、失敗します。

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

ユーザーが WP8 で絵文字を追加できないようにしたい

4

1 に答える 1

4

.NET は正規表現のサロゲート ペアをサポートしていないためです。それらを手動で分解する必要があります。明確にするためにchar、.NET の a は 16 ビットですが、1F6002 つ必要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. サロゲート ペアの最初の部分は "fixed":\uD83Dで、もう 1 つは範囲です。

コード例 ( 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 uDC00toです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]");
于 2013-08-07T13:18:59.317 に答える