恐怕你这个就太广泛了,因为本来合法性就是针对你自己所需要的而言
不过你可以写一个专门的函数来解决,这个问题还是可以解决的,比如现在我希望数据中全部都不能位数字
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;
  }

解决方案 »

  1.   

    表达式的识别,请自行扩展<script>
    /*
    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>
      

  2.   

    真的非常感谢楼上大侠指点。后面那段匹配算符的方法不错。
    另外我自己扩充了一个算法,取负,就是加“-”也合法,贴出代码回报大家。只简单测试了一下,不保证完全没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;
    }