首页 > 解决方案 > 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”来做到这一点。你知道我该如何解决吗?

标签: javascriptangulartypescript

解决方案


您可以使用正则表达式(\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"))


推荐阅读