javascript - 在 javascript 上接受重音符号 & ñ

标签 javascript bots diacritics

我正在制作一个机器人来回答给定一些关键词的问题。这是一个非常简单的代码,由 Deni Spasovski 开发。但是,我的网站是西类牙语的,我需要能够使用重音符号 & ñ 作为关键词的一部分。例如:

{ "keys": ["cómo", "estás"], "value": 0 }

但是,尽管我很努力,但我似乎无法修复代码。我对编码了解不多。也许这是我必须对其中一个脚本实现的一件非常简单的事情,但我真的不知道它是什么。

如果你能帮助我,我将不胜感激。

提前非常非常感谢!

这是 HTML:

<!DOCTYPE html>
<html>
<head>
    <!--Read the source Luke!-->
    <title>Answer bot</title>
    <style type="text/css">
        body, html
        {
            height: 100%;
        }
        .wrap
        {
            height: 80%;
            overflow: auto;
            max-height: 80%;
            display: block;
        }
        .content
        {
            height: 100%;
            display: table;
            vertical-align: bottom;
        }
        .subcontent
        {
            display: table-cell;
            vertical-align: bottom;
        }
        .answerbot-input
        {
            color: #1AA1E1;
        }
        .answerbot-ai
        {
            color: #CE5043;
        }
    </style>
</head>
<body>
    <div style="width: 800px; height: 100%; margin: 0 auto;">
        <div id="wrap" class="wrap">
            <div class="content">
                <div class="subcontent" id='subcontent'>
                    <p class='answerbot-ai'>
                        Don't be afraid, talk to me.
                    </p>
                </div>
            </div>
        </div>
        <div>
            <input type="text" name="inputtext" style="width: 100%;" onkeyup="keypressInput(this, event);"><br />
        </div>
    </div>
    <script type="text/javascript" src="scripts.js"></script>
    <script type="text/javascript" src="data.js"></script>
    <script type="text/javascript">
        var _answerBot = new answerBot();
        function keypressInput(sender, event) {
            if (event.which == 13) {
                document.getElementById('subcontent').innerHTML += _answerBot.processInput(sender.value);
                sender.value = '';
                correctScroll("wrap");
            }
        }

        function correctScroll(elementId) {
            var objDiv = document.getElementById(elementId);
            objDiv.scrollTop = objDiv.scrollHeight;
        }
    </script>
</body>
</html>

这是 data.js:

if (answerBot) {
    answerBot.prototype.specialContext = {
        "wrongInput": ["I don't understand you.", "Could you rephrase the question?"],
        "emptyInput": ["Please say something", "Speak louder", "Well i can't read minds."],
        "rephrase": ["Can you tell me if your question was about one of the following things:"]
    };

    answerBot.prototype.keywords = [
        { "keys": ["hi"], "value": 0 },
        { "keys": ["hello"], "value": 0 },
        { "keys": ["life", "universe", "everything"], "value": 1 },
        { "keys": ["software", "development"], "value": 2 },
        { "keys": ["software", "engineering"], "value": 2 },
        { "keys": ["who", "made", "you"], "value": 3 },
        { "keys": ["who", "wrote", "you"], "value": 3 },
        { "keys": ["who", "coded", "you"], "value": 3 },
        { "keys": ["is", "this", "real", "life"], "value": 4 },
        { "keys": ["who", "is", "deni"], "value": 5 },
        { "keys": ["tell", "me", "about", "deni"], "value": 5 },
        { "keys": ["tell", "me", "about", "author"], "value": 5 },
        { "keys": ["show", "me", "author"], "value": 5 },
        { "keys": ["can", "see", "source"], "value": 6 },
        { "keys": ["can", "see", "sourcecode"], "value": 6 },
        { "keys": ["show", "me", "code"], "value": 6 },
        { "keys": ["how", "are", "you"], "value": 7 },
        { "keys": ["who", "is", "this"], "value": 8 }];

    answerBot.prototype.answers = [
        {
            "description": "Hi!",
            "values": ["Hello there!", "Hi how can I help you today", "Hi! What brings you here?"]
        },
        {
            "description": "What is the answer to life the universe and everything?",
            "values": ["42"]
        },
        {
            "description": "What is software development?",
            "values": ["Programming! Do you speak it?"]
        },
        {
            "description": "Who created me?",
            "values": ["I was created by another <a href='http://about.me/deni' target='_blank'>bot</a>.", "The question is who sent you here?"]
        },
        {
            "description": "Is this real life?",
            "values": ["No this is the internetz!", "Find out <a href='http://www.youtube.com/watch?v=txqiwrbYGrs' target='_blank'>yourself</a>!"]
        },
        {
            "description": "Who is Deni?",
            "values": ["This is his <a href='https://plus.google.com/+DeniSpasovski/' target='_blank'>G+ profile</a>.", "This is his <a href='www.linkedin.com/in/denispasovski' target='_blank'>Linkedin profile</a>."]
        },
        {
            "description": "Where is your source?",
            "values": ["Here is the <a href='https://github.com/denimf/Answer-bot' target='_blank'>source</a>."]
        },
        {
            "description": "How are you?",
            "values": ["I'm good how are you?"]
        },
        {
            "description": "Who is this?",
            "values": ["StackOverflow Exception occurred", "The question is who are you?"]
        }
        ];
}

这是 scripts.js:

var answerBot = function () {
    var _this = this;
    _this.processInput = function (text) {
        updateUrl(text);
        var _result = "<p class='answerbot-input'>" + text + "</p>";
        text = text.replace(new RegExp("[^a-zA-Z ]", "g"), " ");
        text = text.replace(new RegExp("[ ]{2,}", "g"), " ");
        var _words = text.toLowerCase().split(" ");
        var _answers = [];
        var _title = "";
        if (_words.length === 0 || _words.toString() === '') { //if the input is empty
            _answers = _this.specialContext.emptyInput;
            _title = _this.specialContext.emptyInput;
        } else {
            var _possibleAnswers = findMatches(_words);
            if (_possibleAnswers.length === 0) { //if no answer found
                _answers = _this.specialContext.wrongInput;
                _title = _this.specialContext.wrongInput;
            }
            if (_possibleAnswers.length == 1) { //context recognized
                _answers = _this.answers[_possibleAnswers[0]].values;
                _title = _this.answers[_possibleAnswers[0]].description;
            }
            if (_possibleAnswers.length > 1) {
                _result += formatText(_this.specialContext.rephrase, _this.specialContext.rephrase);
                for (var i = 0; i < _possibleAnswers.length; i++) {
                    _result += formatText(_this.answers[_possibleAnswers[i]].description, _this.answers[_possibleAnswers[i]].description);
                }
            }
        }
        if (_answers.length > 0) {
            var _rand = Math.floor((Math.random() - 0.001) * _answers.length);
            _result += formatText(_answers[_rand], _title);
        }
        return _result;
    };

    function formatText(text, title) {
        return "<p class=\'answerbot-ai\' title=\'" + title + "\'>" + text + "</p>";
    }

    function findMatches(words) {
        var foundKeywords = [];
        var _possibleAnswers = [];
        for (var i = 0; i < _this.keywords.length; i++) {
            foundKeywords[i] = 0;
            for (var j = 0; j < words.length; j++) {
                if (_this.keywords[i].keys.indexOf(words[j]) >= 0) {
                    foundKeywords[i]++;
                    if (foundKeywords[i] == _this.keywords[i].keys.length) {
                        return [_this.keywords[i].value];
                    }
                }
            }
            if (foundKeywords[i] * 2 > _this.keywords[i].keys.length) {
                _possibleAnswers.push(_this.keywords[i].value);
            }
        }
        return _possibleAnswers.filter(function (elem, pos) {
            return _possibleAnswers.indexOf(elem) == pos;
        });
    }

    function updateUrl(text){
        history.pushState(null, null, "#question=" + encodeURIComponent(text));
        if(typeof ga === "function")//google analytics
            ga('send', 'event', 'question', text);
    }
};

最佳答案

三个可能的问题:

1) 这一行:

text = text.replace(new RegExp("[^a-zA-Z ]", "g"), " ");

将用空格替换任何不在“正常”字母表中的内容。您可能会选择在某个时候替换它以包含带有变音符号的字符,但要使其正常工作,您只需将其注释掉即可。

2) 确保您的文件(尤其是 data.js)以 UTF-8 编码保存。

3) 确保答案数组中有一个合适的值,然后在 keywords.value 中使用它的索引。例如

    {
        "description": "cómo estás?",
        "values": ["muy bien"]
    }

关于javascript - 在 javascript 上接受重音符号 & ñ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42124985/

相关文章:

Javascript:使用触发函数时如何避免丢失变量

c# - Bot Framework 无法发送 FacebookQuickReply ChannelData - 如何查找原因?

linux - 相同变音符号(变音符号)的不同 UTF-8 签名 - 2 种二进制方式来编写变音符号

python - 丢失编码( shell 和重音)

javascript - 如何远程检查JavaScript应用程序的函数调用堆栈?

javascript - 在onclick事件中传递两个参数?

javascript - 从全局范围内调用 jQuery 中的函数

C++网络编程

node.js - 值被最新请求机器人的人覆盖吗?

android - 让用户设置浅色或深色主题加上强调色