좋아, 이건 알아내는 데 시간이 좀 걸렸는데, 잘 고를 만들기 위해 캐릭터를 조합 하는 것은 이것들에만 국한 된다는 인상을 받았습니다 . 그래서 나는 괴물을 잡기 위해 정규식 을 따르기를 기대했습니다 .
([\u0300–\u036F\u1AB0–\u1AFF\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F]{2,})
작동하지 않았습니다 ...
문제 는 위키의 목록이 문자 결합의 전체 범위를 다루지 않는다는 것입니다.
나에게 힌트를 준 것은 "ก้้้้้้้้้้้้้้้้้้้้".charCodeAt(2).toString(16)
= "e49"로 결합 범위 내에 있지 않으면 '개인 사용'에 해당합니다.
C #에서 그들은 아래로 떨어지고 UnicodeCategory.NonSpacingMark
다음 스크립트는 그들을 플러시합니다.
[Test]
public void IsZalgo()
{
var zalgo = new[] { UnicodeCategory.NonSpacingMark };
File.Delete("IsModifyLike.html");
File.AppendAllText("IsModifyLike.html", "<table>");
for (var i = 0; i < 65535; i++)
{
var c = (char)i;
if (zalgo.Contains(Char.GetUnicodeCategory(c)))
{
File.AppendAllText("IsModifyLike.html", string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>A&#{3};&#{3};&#{3}</td></tr>\n", i.ToString("X"), c, Char.GetUnicodeCategory(c), i));
}
}
File.AppendAllText("IsModifyLike.html", "</table>");
}
생성 된 테이블을 살펴보면 어떤 테이블이 스택되는지 확인할 수 있습니다. wiki에서 누락 된 범위 중 하나는 06D6-06DC
다른 범위입니다 0730-0749
.
최신 정보:
다음 은 '정상'범위에서 우회 된 것을 포함하여 모든 잘 고를 처리해야하는 업데이트 된 정규식 입니다.
([\u0300–\u036F\u1AB0–\u1AFF\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F\u0483-\u0486\u05C7\u0610-\u061A\u0656-\u065F\u0670\u06D6-\u06ED\u0711\u0730-\u073F\u0743-\u074A\u0F18-\u0F19\u0F35\u0F37\u0F72-\u0F73\u0F7A-\u0F81\u0F84\u0e00-\u0eff\uFC5E-\uFC62]{2,})
가장 어려운 부분은 일단 확인한 후 확인하는 것입니다. 위의 몇 가지 좋은 솔루션을 포함하여 다양한 솔루션이 있습니다.
이것이 시간을 절약하기를 바랍니다.