作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 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 中减去字符代码来反转字符串进行编码,然后再反转回来以获得明文。使用“new 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 here .
如果您不喜欢使用高字符代码,我可以轻松地替换各种不喜欢使用高字符代码的编码函数,尽管这个是最紧凑的。
编辑:要获取反转的字符串,可以使用 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");
关于javascript - unescape 在脏话过滤器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347494/
我知道对于为什么这是一个坏主意有很多争论,但在我的实现中,我计划在帐户设置中启用/禁用坏词。换句话说,坏词默认是可见的,但如果询问则关闭/隐藏。 计划是向客户端发送一个 JSON 字符串,让客户端过滤
我是一名优秀的程序员,十分优秀!