Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查字符串是否是JavaScript中的数学表达式_Javascript - Fatal编程技术网

检查字符串是否是JavaScript中的数学表达式

检查字符串是否是JavaScript中的数学表达式,javascript,Javascript,我想知道一种检查字符串是否是数学表达式的简单方法。 举个例子,谷歌(和其他搜索引擎)在搜索时使用这个 PS:我不一定要检查像sin、cos等东西 示例:2+2应返回true但letters+somethingelse应返回false 谢谢 这里有一个正则表达式,可以实现我认为您需要的功能: /(?:(?:^|[-+_*/])(?:\s*-?\d+(\.\d+)?(?:[eE][+-]?\d+)?\s*))+$/ 它将一个数字(可选为负数)与可选的十进制数字相匹配,后跟零个或多个运算符/数字对

我想知道一种检查字符串是否是数学表达式的简单方法。 举个例子,谷歌(和其他搜索引擎)在搜索时使用这个

PS:我不一定要检查像
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