恐怕你这个就太广泛了,因为本来合法性就是针对你自己所需要的而言
不过你可以写一个专门的函数来解决,这个问题还是可以解决的,比如现在我希望数据中全部都不能位数字
Function isAllNumber(str)
{
strNumber="0123456789"
For(int i=0;i<str.length;i++)
{
temp=substring(str,i,i+1)
if(strNumber.indexOf(temp,0)==-1)
return false;
}
return true;
}
不过你可以写一个专门的函数来解决,这个问题还是可以解决的,比如现在我希望数据中全部都不能位数字
Function isAllNumber(str)
{
strNumber="0123456789"
For(int i=0;i<str.length;i++)
{
temp=substring(str,i,i+1)
if(strNumber.indexOf(temp,0)==-1)
return false;
}
return true;
}
/*
expr : (expr)
| expr + expr
| expr - expr
| expr * expr
| expr / expr
| DIGIT
| ALPHA
;
*/
os = "(a + b)*2+2";
// 格式化表达式,删去空格
s = os.replace(/ +/g,"");
// 检查表达式中可能出现的变量是否合法
ar = s.match(/[a-z_]\w*/ig);
for(i=0;i<ar.length;i++) {
try {
eval(ar[i]);
}catch(e) {
alert(ar[i]+":未定义");
}
}
// 匹配变量
s = s.replace(/[a-z_]\w*/ig,"expr");
// 匹配常量
s = s.replace(/\d+/ig,"expr");
// 匹配算符
do {
s1 = s;
s = s.replace(/expr[-+*/]expr/,"expr");
s = s.replace(/\(expr\)/,"expr");
}while(s1 != s);
if(s != "expr")
alert("错误的表达式:"+os);
else
alert("正确:"+os);
</script>
另外我自己扩充了一个算法,取负,就是加“-”也合法,贴出代码回报大家。只简单测试了一下,不保证完全没bug。此贴过几天结。另我自己写了判断式(如:a>b&&c==d)的合法性判断代码,有需要的喊一声我贴出来。其他的相同,就匹配算符那里做了改动。/*---------------------------------------------*/
//循环模块,匹配算符,对-特殊处理
function checkExp3(exp){
var express = exp;
express=express.replace(/\(-\)/ig,"-");
do {
express1 = express;
express = express.replace(/expr[-+*/]expr/,"expr");
express = express.replace(/\(expr\)/,"expr");
}while(express1 != express);
if(express.indexOf("-expr")!=-1){
express = express.replace(/-expr/ig,"expr");
return checkExp3(express);
}else{
return(express);
}
}
/*---------------------------------------------*/
if(checkExp3(osTemp)!="expr"){
alert("公式中存在逻辑语法错误,请自行检查更正");
return false;
}