SOURCE

function checkInput(str) {
    let a = '1';
    const reg = new RegExp(/F\d+/g);
    const allF = ['F0', 'F1', 'F2', 'F3', 'F18'];
    const curF = str.match(reg);
    console.log(allF, curF);
    for (let f of curF) {
        if (!allF.includes(f)) {
            return false
        }
    }
    const nstr = str.replace(reg, '1'); // 替换成纯粹的数学计算公式
    console.log(nstr)
    if (/[A-Za-z\u4E00-\u9FFF]/g.test(nstr)) {  // 校验是否有中英文
        return false;
    }
    let num;
    try {
        num = eval(nstr);
        console.log(num)
        return typeof num === 'number' && !isNaN(num);
    } catch (e) {
        console.log(e)
        return false
    }
}

function sandboxEval(code) {  // 隔离作用域中的变量,单纯的执行eval
    with (code) {
        return eval(code);
    }
}

// (F0+ F1+F2)+F3 +-F18*12')
if (checkInput('(F0+ F1+F2)+F3 +-F18*12')) {
    console.log('校验通过');
    Promise.resolve();
} else {
    console.log('校验不通过');
    Promise.reject('校验不通过');
}
console 命令行工具 X clear

                    
>
console