博主使用React + Antd + hot-formula-parser 实现以下功能
hot-formula-parser插件可以帮我们实现表达式的计算,表达式的格式判断等,如下图:
https://www.npmjs.com/package/hot-formula-parser
图一
图二
图三
概览图
使用方式:
import React, { Component } from 'react';
const FormulaParser = require('hot-formula-parser').Parser;
const parser = new FormulaParser();
let tempObj = parser.parse(new_express);
具体处理代码:
// 检查表达式验证是否通过 表达式 和 投标利率(%) 二取其一
checkoutExpression = (text, obj) => {
try {
if (text) {
let new_express;
let result;
// 需要对x的值代入表达式 否则表达式无法解
try {
new_express = this.props.checkExpressType(text, obj);
let tempObj = parser.parse(new_express);
return result = tempObj.error + '';
} catch (e) {
result = false;
console.log('e', e)
}
}
}
catch (e) {
console.log('表达式格式错误:', e);
}
}
checkExpressType = (text, obj) => {
let new_express;
let arrStr;
let result;
if (text.indexOf('(') > -1) { // 区分是否是函数 如果是 不能直接替换x 因为max也有x
arrStr = text.split('(');
arrStr[1] = arrStr[1].replace('x', `*${obj.prdAmount}`);
new_express = arrStr[0] + '(' + arrStr[1];
} else { // 当不是函数时,判断x是否有系数 有则增加乘号
const i = text.indexOf('x');
arrStr = text.split('');
let isOper = true;
let flag = arrStr.length > 1 ? arrStr[i - 1] : false;
if (!isNaN(+flag)) {
isOper = false;
}
const x = isOper ? `${obj.prdAmount}` : `*${obj.prdAmount}`; // prdAmount是“发行规模x”
new_express = text.replace('x', x)
}
return new_express;
}