2014-01-14 31 views
2

这个工程,我想:制作莱特说翻译

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”

http://jsbin.com/OjEMEqA/1/

***请查看更新的问题 - leet speak translator critical bug

+0

你试图完成什么? 'changeLetters()'会将'cool'改为'c00l',然后'changeWords()'将改变为'kewl'。有什么问题吗? – JLRishe

+0

我正在寻找一种方法来将单词“cool”,“hacker”直接转换为“kewl”和“haxor”,然后将其他字母转换为'changelettrs()' – user3079292

+0

@ user3079292:调用您的调用顺序? –

回答

1

你将不得不跟踪取代的文字中的单词,所以它们的单个字母不会被changeLetters()所取代。这是不必要的复杂。你会更好地运行你的changeLetters()算法来处理你的“单词”对象(“酷”,“伙计”,...)的值。这样,你可以保持字符串字面理智(非leet),但你可以继续使用你现在使用的代码。 (请确保您将“单词”存储在全局范围内,并且只将其转换为“单词”对象一次)。

+0

是的,我正在寻找复杂的算法,并考虑了很多... – user3079292

0

我正在寻找一种方法将“cool”,“hacker”等词语转换为“kewl “和‘haxor’直接再转换其他字母与changelettrs()

目前你转换字母,然后转换的话

只需简单更换这些操作办法:

changeWords(); 
changeLetters(); 

您当然必须更改words中的密钥,因为它们现在将在之间应用字母转换。

+0

我想使用我对我的代码评论的对象。 – user3079292

+1

然后继续使用它。有什么问题? – JLRishe

+0

抱歉,但你没有得到我... – user3079292