javascript - Angular7:如何评估算术字符串
问题描述
我正在使用 Angular 7,我想评估一个算术函数,我收到的字符串如下:
我从一个数字的服务中得到一个“价值”。我还得到一个“规则”作为@Input 参数应用于这个值,它是一个字符串,可以包含“>”、“<”和“==”。例子:
value = 10;
rule = ">2"
然后我想应用该规则并检查它是否正确:
if (10 > 2) {
console.log("this rule applies!");
}
我尝试像这样使用 eval:
const strValue: string = value.toString();
const expression = strValue.concat(rule);
if (eval(expression)) {
console.log("this rule applies!");
}
但我收到一个错误:
拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' 不是以下内容安全策略指令中允许的脚本来源:“script-src 'self' 'unsafe-inline'”。
所以我想我不应该使用“eval”来做到这一点。你知道我该如何解决吗?
解决方案
您可以使用正则表达式(\D+)(\d+)
来获取后跟数字的任何运算符。switch
如果您选择扩展它,您可以添加更多运算符。
function evaluate(value, rule) {
const [,operator, number] = rule.match(/(\D+)(\d+)/)
switch(operator) {
case ">" : return value > number
case "<" : return value < number
case "==" : return value == number
}
return null
}
console.log(evaluate(3, ">1"))
console.log(evaluate(3, "<2"))
console.log(evaluate(3, "==3"))
推荐阅读
- python-3.x - 赋值前引用的局部变量“num1”
- node.js - ReferenceError: firebase 未定义 - 在 Nodejs/express
- html - 当 id 包含特殊字符时,为什么维基百科使用第二个 html 锚点
- r - R:如何更改通过 for 循环中的变量创建的数据框的单元格值
- c++ - OnConnect() 回调没有被使用 mosquitto C 调用
- ms-project - 在 MS Project 中发布新项目计划之前更改概览
- java - 如何将列表中的员工随机分配到 4 个不同的组
- mysql - 查找未加入 SQL 和特定 ID 的记录
- python - 开始日期的滚动平均值发生在之前
- c++ - 如何从 Linux 控制台使用 CMake 构建 Eclipse C++ 项目(没有可用的 GUI)