如何为JavaScript关键词匹配型聊天机器人添加简易计算器功能?
给JavaScript聊天机器人添加简易数学运算功能方案
嘿,这个需求挺实用的!咱们可以通过「识别数学表达式→安全计算→集成到现有逻辑」这三步来实现,下面是具体的落地代码和思路:
一、核心思路
聊天机器人需要先判断用户输入是否是数学计算题,提取合法的运算表达式后,安全计算结果并返回。重点要避免直接使用eval(),防止恶意输入带来的安全风险。
二、具体实现步骤
1. 编写表达式识别与安全计算函数
先写一个专门处理数学计算的函数,包含输入校验和安全计算逻辑:
function calculateMath(expr) { // 第一步:清理输入中的空格 const cleanExpr = expr.replace(/\s+/g, ''); // 第二步:严格校验输入合法性——只能包含数字、+、-、*、/、小数点 const validRegex = /^(\d+(\.\d+)?)([\+\-\*\/](\d+(\.\d+)?))+$/; if (!validRegex.test(cleanExpr)) { return "抱歉,我目前只能处理包含+、-、*、/的纯数字计算题哦~"; } try { // 用new Function替代eval,配合前面的校验,安全性更高 const result = new Function(`return ${cleanExpr}`)(); // 处理特殊情况:除以0或者非法计算结果 if (isNaN(result) || !isFinite(result)) { return "哎呀,这个计算有问题哦——比如不能除以0哒😯"; } // 可以给结果做个格式化,比如小数太多时保留两位 const formattedResult = Number.isInteger(result) ? result : result.toFixed(2); return `计算结果是:${formattedResult}`; } catch (err) { return "抱歉,我暂时算不出这个结果,换个简单的试试?"; } }
2. 集成到聊天机器人的响应逻辑
把上面的函数嵌入到你现有的关键词识别流程里,优先判断是否是数学计算请求:
function getBotResponse(userInput) { // 先检查是否是数学计算题(只要包含数字+运算符就触发) const hasMathOperators = /[\d\+\-\*\/]/.test(userInput); if (hasMathOperators) { return calculateMath(userInput); } // 下面是你原来的关键词响应逻辑,保留即可 if (userInput.includes("你好")) { return "哈喽哈喽😊"; } if (userInput.includes("天气")) { return "抱歉,我还不会查天气呢😅"; } // 其他关键词规则... return "我有点懵,能不能换个说法呀?"; }
3. 测试与优化
- 测试正常场景:比如
"10 + 5"、"3.5 * 4 - 2",应该返回正确结果 - 测试异常场景:比如
"10 / 0"、"2++3"、"abc+123",应该返回友好提示 - 进阶优化:如果需要支持括号运算,可以调整正则为
/^[\d\+\-\*\/\(\)\.]+$/,同时额外添加括号配对校验逻辑
内容的提问来源于stack exchange,提问作者coderino
相关产品推荐
相关产品推荐

