gpt4 book ai didi

javascript - 利特说话翻译器严重错误

转载 作者:行者123 更新时间:2023-11-28 01:39:13 25 4
gpt4 key购买 nike

昨天我发布了一个关于我的 leet talk JavaScript 应用程序的问题 - Making a leet speak translator

今天老化发布了有关此的内容。我改进了代码,终于遇到了一个关键问题。

这是应用程序 - http://jsbin.com/azIQiVi/1

乍一看,您会认为它运行良好。但实际上并非如此。

“hacker”“cool”附加一些标点符号(如)时,它无法更改这些词逗号换行符

例如,如果您编写“He is a Cool hacker”,它会将其转换为“h3 15 4 kewl h4x0r”,这样就可以了。

但是如果你写“他是一个很酷的黑客。”(注意句号),它会将其转换为“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);

最佳答案

您通过空格分割单词的方法(正如您已经注意到的那样)不适用于标点符号。所以更好的方法是一个一个地认单词,同时注意标点符号。

这个使用了字符串类型的replace()函数。它将用字典中相应的单词替换任何找到的匹配项。正则表达式模式 [^,\.\s]+ 检测除逗号、点或空白(空格、制表符、换行符等)之外的任何字符组合。

function changeWords() {
// change special words
return changeLetters().replace(
/[^,\.\s]+/g,
function(m) {
return words[m] ? words[m] : m;
}
);
}

关于javascript - 利特说话翻译器严重错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com