Regexを使用してu2600-u26FFの範囲のテキスト ボックスでEmojisを制限したいと思います。
これを試しましたが、失敗します。
private static readonly Regex regexEmoji = new Regex(@"[\u1F600-\u1F6FF]|[\u2600-\u26FF]");
ユーザーが WP8 で絵文字を追加できないようにしたい
Regexを使用してu2600-u26FFの範囲のテキスト ボックスでEmojisを制限したいと思います。
これを試しましたが、失敗します。
private static readonly Regex regexEmoji = new Regex(@"[\u1F600-\u1F6FF]|[\u2600-\u26FF]");
ユーザーが WP8 で絵文字を追加できないようにしたい
.NET は正規表現のサロゲート ペアをサポートしていないためです。それらを手動で分解する必要があります。明確にするためにchar
、.NET の a は 16 ビットですが、1F600
2 つ必要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 DF00
toD83C DFFF
とD83D uDC00
toです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]");