2014-01-14 67 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