这就像我想要的那样:
var elite = document.getElementById("elite"),
leet = document.getElementById("leet"),
alphabets = {
a: "4",
b: "8",
e: "3",
g: "6",
i: "1",
o: "0",
p: "9",
s: "5",
t: "7",
z: "2"
},
// words = {
// cool: "kewl",
// dude: "d00d",
// hacker: "h4x0r",
// newbie: "n00b",
// sucks: "sux0r"
// },
words = {
"c00l": "kewl",
"dud3": "d00d",
"h4ck3r": "h4x0r",
"n3w813": "n00b",
"5uck5": "sux0r"
},
wordsArr,
text;
function changeLetters() { // change all letters
text = elite.value.toLowerCase();
for (var i = 0; i < text.length; i++) {
if (alphabets[text[i]]) {
text = text.replace(text[i], alphabets[text[i]]);
}
}
// leet.value = text;
}
function changeWords() { // change special words
wordsArr = text.split(" ");
for (var i = 0; i < wordsArr.length; i++) {
if (words[wordsArr[i]]) {
wordsArr[i] = words[wordsArr[i]];
}
}
}
function tol33t() {
changeLetters();
changeWords();
leet.value = wordsArr.join(" ");
}
elite.addEventListener("input", tol33t);
document.getElementById("btn").addEventListener("click", tol33t);
你可以看到我在将它们转换为leet后替换单词。但我很想知道如何直接替换单词。我的意思是使用我评论的对象。 从“酷”到“kwel”而不是从“c00l”到“kewl”
***请参阅更新后的问题 - leet speak translator critical bug
答案 0 :(得分:1)
您必须跟踪文本中替换的单词,因此他们的单个字母不会被changeLetters()替换。这是不必要的复杂。你可以更好地运行你的changeLetters()算法而不是“words”对象中的值(“cool”,“dude”,......)。这样,您可以保持字符串文字清晰(非leet),但您可以继续使用您正在使用的代码。 (确保将“单词”存储在全局范围内,并且只将“单词”对象转换一次。)
答案 1 :(得分:0)
我正在寻找一种方法将“酷”,黑客“转换为”kewl“和”haxor“之类的单词直接转换为其他字母,然后使用changelett转换其他字母()
目前,您正在转换字母,然后转换字词。
简单地交换这些操作:
changeWords();
changeLetters();
当然,您必须更改words
中的密钥,因为他们现在会在字母转换之前应用。