昨天我张贴关于我的莱特的问题发言的JavaScript应用程序- 制作莱特说翻译
今天老化有关张贴。 我已经提高了代码,并最终有一个关键的问题。
这里是应用程序- http://jsbin.com/azIQiVi/1
乍一看,你会觉得它工作正常。 但实际上不是。
它不能改变类的字眼"hacker"
或"cool"
,当连接一些标点符号像dot
, comma
, newline
等。
例如,如果你写"He is a cool hacker"
,将其转换为"h3 15 4 kewl h4x0r"
,这很好。
但是,如果你写的"He is a cool hacker."
(注意句号),将其转换为"h3 15 4 kewl h4ck3r."
应该将其转换为"h3 15 4 kewl h4x0r."
希望你明白我的意思。
我无法来解决这个问题,任何想法?
这里是代码:
// http://en.wikipedia.org/wiki/Leet
// http://www.catb.org/jargon/html/crackers.html
var words = {
"am": "m",
"are": "r",
"at": "@",
"thanks": "thx",
"your": "ur",
"cool": "kewl",
"defeated": "pwned",
"dude": "d00d",
"fear": "ph33r", // or ph34r
"fool": "f00",
"freak": "phreak",
"hacker": "h4x0r",
"lamer": "l4m3r",
"mad": "m4d",
"newbie": "n00b",
"own": "pwn",
"phone": "fone",
"porn": "pr0n", // or n0rp
"rocks": "roxxorz",
"skill": "sk1llz",
"sucks": "sux0r",
"the": "t3h",
"uber": "ub3r", // or |_|83r
"yay": "w00t",
"yo": "j0",
"you": "j00" // or U
};
var alphabets = {
"a": "4",
"b": "8",
"e": "3",
"f": "ph",
"g": "6", // or 9
"i": "1", // or |
"o": "0",
"s": "5",
"t": "7" // or +
// advanced
// "c": "(", // or k or |< or /<
// "d": "<|",
// "h": "|-|",
// "k": "|<", // or /<
// "l": "|", // or 1
// "m": "|\\/|",
// "n": "|\\|",
// "p": "|2",
// "u": "|_|",
// "v": "/", // or \/
// "w": "//", // or \/\/
// "x": "><",
// "y": "'/"
};
var elite = document.getElementById("elite"),
leet = document.getElementById("leet"),
randomcase = document.getElementById("randomcase");
function changeLetters(text) { // change letters
text = text || elite.value.toLowerCase();
for (var i = 0; i < text.length; i++) {
if (alphabets[text[i]]) {
text = text.replace(text[i], alphabets[text[i]]);
}
}
return text;
}
function changeWords() { // change special words
var wordsArr = changeLetters().split(" ");
for (var i = 0; i < wordsArr.length; i++) {
if (words[wordsArr[i]]) {
wordsArr[i] = words[wordsArr[i]];
}
}
return wordsArr.join(" "); // text
}
function randomizeCase() { // RANdOMiZE CAsE
var text = changeWords();
for (var i = 0; i < text.length; i++) {
if (Math.random() > 0.5) {
text = text.replace(text[i], text[i].toUpperCase());
} // else keep lower case
}
return text;
}
(function() { // l33t the words object
for (var word in words) {
if (words.hasOwnProperty(word)) {
words[changeLetters(word)] = words[word];
delete words[word];
}
}
}());
function tol33t() {
leet.value = randomcase.checked ? randomizeCase() : changeWords();
}
elite.addEventListener("input", tol33t);
document.getElementById("btn").addEventListener("click", tol33t);