检查字符串是否是JavaScript中的数学表达式
我想知道一种检查字符串是否是数学表达式的简单方法。 举个例子,谷歌(和其他搜索引擎)在搜索时使用这个 PS:我不一定要检查像检查字符串是否是JavaScript中的数学表达式,javascript,Javascript,我想知道一种检查字符串是否是数学表达式的简单方法。 举个例子,谷歌(和其他搜索引擎)在搜索时使用这个 PS:我不一定要检查像sin、cos等东西 示例:2+2应返回true但letters+somethingelse应返回false 谢谢 这里有一个正则表达式,可以实现我认为您需要的功能: /(?:(?:^|[-+_*/])(?:\s*-?\d+(\.\d+)?(?:[eE][+-]?\d+)?\s*))+$/ 它将一个数字(可选为负数)与可选的十进制数字相匹配,后跟零个或多个运算符/数字对
sin
、cos
等东西
示例:2+2
应返回true
但letters+somethingelse
应返回false
谢谢 这里有一个正则表达式,可以实现我认为您需要的功能:
/(?:(?:^|[-+_*/])(?:\s*-?\d+(\.\d+)?(?:[eE][+-]?\d+)?\s*))+$/
它将一个数字(可选为负数)与可选的十进制数字相匹配,后跟零个或多个运算符/数字对
它还允许数字和运算符之间使用空格
const re=/(?:(?:^ |[-+.*/])(?:\s*-?\d+(\.\d+)(?:[eE][+-]?\d+)+$;
功能测试{
console.log(“%s有效?%s”,s,重新测试);
}
//有效的
测试(“1”);
测试(“1+2”);
测试(“1*2*3”);
测试(“-1*2--3”);
测试(“-1*2--3e4”);
测试(“-1*2--3.5E6”);
//无效的
测试(“1+”);
测试(“1+foo”)代码>您可以使用。转到该链接以了解更多关于它们的信息
这是一个非常简单的示例,只需检查一个数字,然后是一个+、-、*,或/然后是另一个数字。你会想调整它,并添加到它,以满足你的需要
/\d+(\+|\-|\*|\/)\d+/.test("1+2") // returns true
/\d+(\+|\-|\*|\/)\d+/.test("a+b") // returns false
使用,您可以在try/catch
语句中换行:
函数isMathExpression(str){
试一试{
Complex.compile(str);
}捕获(错误){
返回false;
}
返回true;
}
log(isMathExpression('2+2'))
log(isMathExpression('foo+bar'))
log(isMathExpression('sin(5)+sqrt(2/5i)'))
您可以使用math.js进行此操作
供您的案例使用
math.evaluate(表达式)
如果要检查表达式(包含变量)是否在数学上有效,请使用math.parse(表达式)
例如math.parse('a+b')
有效,但math.parse('b+')
将引发异常。
function isValidMathExpression(expr){
try{
math.parse(expr);
return true;
}
catch(ex){
return false;
}
}
您可以发布一些代码吗?可能尝试将结果转换为int,如果失败,则返回false。@void我有一个字符串str,等于通过document.getElementById输入的值不是问题要求它,而是其他任何人,这不能解释数字e,所以要小心边缘case@floor你说得对。这有一点很难处理。我想这只是一个简单的起点。@floor\d+\.?\d*(?:e[+-]?\d+)
是一个很好的正则表达式,可以匹配所有有效的数值常量。我更新了正则表达式以避免重复数字的定义,并且包括并扩展@PatrickRoberts符号,以便允许大写E
,并禁止尾随
,以避免3.e4
,尽管这是一个意见问题。这没什么大不了的,但是如果在正则表达式末尾指定大小写-i
n敏感标志,则[eE]
可以是E
。