ठीक है, मुझे यह पता लगाने में थोड़ा समय लगा, मुझे आभास हो रहा था कि जालगो के उत्पादन के लिए पात्रों का संयोजन इन तक ही सीमित है । इसलिए मुझे उम्मीद थी कि शैतान को पकड़ने के लिए रेगेक्स का अनुसरण किया जाएगा ।
([\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>");
}
उत्पन्न तालिका को देखकर आपको यह देखने में सक्षम होना चाहिए कि कौन से स्टैक करते हैं। एक सीमा जो विकी पर गायब है वह 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,})
सबसे मुश्किल बिट उन्हें पहचानना है, एक बार जब आप ऐसा कर लेते हैं - ऊपर कुछ अच्छे लोगों सहित समाधानों की भीड़ होती है।
आशा है कि यह आपको कुछ समय बचाता है।