unescape在亵渎过滤器中不起作用



我正在尝试用javaScript制作亵渎过滤器。我成功了,但是当我编码坏单词时,我无法得到它

工作。我已经连续两天了。

我试图将代码在变量中取代,然后在匹配时使用该变量。我尝试在

中取代

也匹配代码。我尝试在document.rite和我想到的其他所有内容中进行混合。

我的原始功能代码:

var badwords = /fck|psssy|ssshole/i;
Baddata1 = FirstName.value;
Baddata2 = LastName.value;

if (Baddata1.match(badwords))
            {
                checker();
                FirstName.focus();
                return false;
            }
            if (Baddata2.match(badwords))
            {
                checker();
                LastName.focus();
                return false;
            }
function checker() 
        {
            window.alert("Please Remove Bad Words");
        }

您可以通过从0xffff中减去char代码来编码来反向字符串,然后再次将其反转以获取清晰的文本。使用"新Regexp"构造:

var encstr = "ン゙ロテム゙フヒニテネミヘロ";   // "bad|nasty|word" put through reverse() function
var badwords = new RegExp(reverse(encstr), "i");
var Baddata1 = "bad";
var Baddata2 = "LastName";
function reverse(str) {
    var sout = "", ix;
    if (!str) {
        return "";
    }
    for (ix = 0;  ix < str.length;  ++ix) {
        sout += String.fromCharCode(0xffff - str.charCodeAt(ix));
    }
    return sout;
}

if (Baddata1.match(badwords))
{
    checker();
    FirstName.focus();
    return false;
}
if (Baddata2.match(badwords))
{
    checker();
    LastName.focus();
    return false;
}
function checker()
{
    window.alert("Please Remove Bad Words");
}

在这里工作JSfiddle。

如果您不喜欢使用高角色代码,我可以轻松地替换不使用的各种编码功能,尽管这是最紧凑的。

编辑:要获取反向字符串,要么使用JS调试器来调用反向,要么添加临时代码:

console.log(reverse("bad|nasty|word"));

这是因为反向(反向(string1))=== string1。反向撤消本身。

您还可以在单独的脚本中保留单词列表,并使用JS字符串加入以逆转以列出列表,例如:

var wordlist = ["bad", "nasty", "word"];
var joined = wordlist.join("|");
console.log('var encstr = "' + reverse(joined) + '"');

您从调试控制台复制了字符串并将其粘贴,单独的脚本可以轻松检查它是否正确:

var encstr = "ン゙ロテム゙フヒニテネミヘロ";
alert("encstr " + (reverse(encstr) === joined ? "matches" : "does NOT match") + " original");

编辑2:如果您不想使用属于国际范围的高char代码,只需使用base64之类的编码,或此简单集:

function encodeStr(str) {
    var sout = "", ix;
    if (!str) {
        return "";
    }
    for (ix = 0;  ix < str.length;  ++ix) {
        if (sout.length)
            sout += ",";
        sout += str.charCodeAt(ix).toString(16);
    }
    return sout;
}
function decodeStr(str) {
    var sout = "", narr, ix;
    if (!str) {
        return "";
    }
    narr = str.split(",");
    for (ix = 0;  ix < narr.length;  ++ix) {
        sout += String.fromCharCode(parseInt(narr[ix], 16));
    }
    return sout;
}
// Using encodeStr on "bad|nasty|word" makes this:
var encstr = "62,61,64,7c,6e,61,73,74,79,7c,77,6f,72,64";
var badwords = new RegExp(decodeStr(encstr), "i");

最新更新