[英]unescape not working in profanity filter
我正在尝试使用javascript做亵渎过滤器。 我很成功,但是当我对坏词进行编码时我却听不到
上班。 我已经连续工作了两天。
我试图使变量中的代码转义,然后在匹配时使用该变量。 我曾尝试在
也要匹配代码。 我已经尝试在document.write和其他我能想到的东西中混合使用。
我原来的功能代码:
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中减去字符编码来反转字符串以进行编码,然后再次反转以获取清晰的文本。 使用“新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");
}
如果您不喜欢使用高位字符代码,尽管这是最紧凑的代码,但我可以轻松地替换各种不需要的编码功能。
编辑:要获取反向字符串,请使用JS调试器调用反向,或添加如下所示的临时代码:
console.log(reverse("bad|nasty|word"));
这是可行的,因为reverse(reverse(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:如果您不想使用属于国际范围的高字符代码,只需使用诸如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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.