用正则写一个校验运算公式:如 "r[0]=r[1]+r[2]-r[3],r[4]=r[0]*r[5]"这样是合格的,运算符号包括 "+ - * / = " ,如多个公式用逗号隔开,每个公式的计算项不限。 不正确例子:"r[0]=r[1]+r[3]r[2]"、"r[0],"、"r[0]=r[1]/"、"r[0]=r[1]=r[2]"、"r[0]=r[1]+r[2],"等,总体说验证正确的运算公式,多个公式中间最后隔开,每个公式的计算项和运算符号不限,越简单越好。
调试欢乐多
var str = "r[0]=r[1]+r[2]-r[3],r[4]=r[0]*r[5]";var bln = (!/[^r[\]+\-*\/=\d,]/.test(str))
&& /^e(?:\,e)*$/.test(
str.replace(/r\[\d+\]/ig, 'x')
.replace(/x(?:[+\-*\/]x)*/g, 'e')
.replace(/e\=e/g, 'e')
);
alert(bln);
var str = "r[4]+r[0]*r[6]=r[7],r[2]=r[1]+r[3]";这样就无法验证了,等号可以在前在后
说错了是四楼是等号固定了:
var str = "r[4]+r[0]*r[6]=r[7],r[2]=r[1]+r[3]";这样就无法验证了,等号可以在前在后
三楼的代码有误,而且没明白我的要求。希望仔细看看我的问题在回答。
var regx = /(r\[\d+\]=r\[\d+\]([+-\/*]r\[\d+\](?!r\[\d+\]),?)+)+/g;
var str = "r[0]=r[1]+r[2]-r[3],r[4]=r[0]*r[5]";
if(regx.exec(str)[0]===str){
alert("匹配");
}else{
alert("不匹配");
}
不固定形式的话var regx = /(r\[\d+\]([+-\/*=]r\[\d+\](?!r\[\d+\]),?)+)+/g
var flag = false;//运算公式是否正确false:正确true:错误
try{
flag = eval(str); //将计算的元素改成true或false 运算符改成& 或||
}catch(e){
flag = true;
} 这样可行不?