我允许用户在web表单字段中指定一个MySQL计算字段,该字段可能读取如下内容:
(bldgFuelCostElectricity * assetMotorSize) * if(bldgField1>bldgField2,bldgField1-bldgField2,0) * 24在运行时,我将用其他表列替换camelcase参数,但在让用户将此表达式保存为报表模板的一部分之前,我希望使用Math.js测试函数的有效性,但它不喜欢IF()构造。Math.js确实允许函数名重写,但我不能让它处理特定的IF情况,因为这是一个保留字。
当MySQL函数的某些函数已经具有JavaScript等价物时,如何使用Math.js测试MySQL函数是否有效?
发布于 2014-12-02 09:21:20
您需要小心地使用math.js的解析器测试math.js语法,因为它们的语法不同。您必须仔细定义所支持的语法,并对其进行明确的测试。
您可以使用math.js将表达式解析为表达式树并对它们进行分析。通过遍历树,可以验证语法。例如:
var node = math.parse('3 * x + 2');
node.traverse(function (node, path, parent) {
switch (node.type) {
case 'OperatorNode': console.log(node.type, node.op); break;
case 'ConstantNode': console.log(node.type, node.value); break;
case 'SymbolNode': console.log(node.type, node.name); break;
default: console.log(node.type);
}
});
// outputs:
// OperatorNode +
// OperatorNode *
// ConstantNode 3
// SymbolNode x
// ConstantNode 2因此,在您的示例中,您只需解析表达式,然后分析返回的树:
var node = math.parse('(bldgFuelCostElectricity * assetMotorSize) * if(bldgField1>bldgField2,bldgField1-bldgField2,0) * 24');
// node.traverse(...)有关更多信息,请参见文档:trees.html
https://stackoverflow.com/questions/27241995
复制相似问题