- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
昨天我发布了一个关于我的 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/
我最近发现需要某种类型的“翻译”类型,可以将特定文本字段或区域翻译成其他语言。 我希望用户何时在 **** 中写入文本html 控件和空格后的文本应转换为本地语言即印地语、阿拉伯语 芬兰语 我不确定是
我正在做一个初学者练习,创建一个 rövarspråket 翻译器。 Write a function translate() that will translate a text into “röv
class seh_exception : public std::exception { public: seh_exception(UINT se_code, PEXCEPTION_P
如果以下代码我没有得到status 200和responseText。但此 URL 有效:http://api.microsofttranslator.com/V2/Http.svc/GetLangu
我想为 Illuminate\Translate\Translator 实现一些额外的功能. 所以,我在 ~/vendor 中创建我的文件夹目录,放在那里My/Traslator类,将实现 Symfo
我经常看到(并重用)没有适当输出的第 3 方源代码。是否有任何工具(代码翻译器)可以将 println 输出转换为合适的日志框架代码 private void processCreateTrainin
我正在制作一个 Pig Latin 翻译器,将用户的输入翻译成 Pig Latin。我已经弄清楚了单词何时以元音开头以及何时不将第一个字母放在中间。然而,当涉及到辅音簇(单词中第一个元音之前的字符组)
这就是我想要的: var elite = document.getElementById("elite"), leet = document.getElementById("leet"), a
因此,我拥有将英语翻译成 Pig Latin 的程序的全部功能。我有大约 80% 的反向翻译功能。 我有两个问题: 首先,当从 Pig Latin 翻译回英语时,它会在它遇到的第一个超过 7 个字符的
VOWELS = ('a', 'e', 'i', 'o', 'u') def pigLatin(word): first_letter = word[0] if first_lette
我有一组用 jquery 编写的表单验证规则 validator插入。由于我必须在服务器端重复相同的验证,所以我认为不必在 PHP 中重写我的规则会很好。如果规则很简单 field=>rulename
gobuffalo i18n 翻译器可在操作中访问,但如何在我的模型上访问它?它需要 buffalo.Context 作为 T *i18n.Translator 中的参数。 提前致谢! 最佳答案 这是
我一直在努力翻译我的应用程序,我从我的数据库中提取翻译并将它们添加到目录中。如果我用 $translator->trans('TEST_TRANSLATION') 回显翻译,一切都在 Symfony
这是我第一次使用 i18next,我不知道如何使它工作。 (似乎 documentation 对我来说是不完整的) 这是我使用 i18next 的 HTML 代码
是否有任何简单的方法可以将 Prolog/ASP 代码转换为 CLIPS? 类似于此,但使用 CLIPS 而不是 Prover9: https://github.com/potassco/anthem
我正在寻找一个免费的 Java 翻译 API,我发现 microsoft-translator-java-api ,它非常容易使用,我喜欢这一点,但是当我从英语翻译成阿拉伯语时,如下所示: publi
如何修改此代码以翻译页面上唯一一个 ID 为 #lyrics 的容器? function googleTranslateElementInit() { new google
我需要将 PHP 源代码编译为 LLVM 位码。我试过 Raven PHP ( http://code.roadsend.com/rphp ),它能够做我想做的事,但该项目似乎已经死了。所以我想检查一
五年多来,我一直在使用此代码在 Excel VBA 宏中将用户输入的英语文本转换为法语或德语。那是在 Microsoft Azure Marketplace 上,由于我的使用量很少,所以它是免费的。
在尝试 Azure 文本翻译 API 时,我偶然发现了应用 ID 或订阅 ID 的一些问题。文档中的应用程序 ID 似乎令人困惑,它不是可以在 Azure 门户中找到的订阅 ID,而是资源 > key
我是一名优秀的程序员,十分优秀!