首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

js正则应验会计公式

2012-09-19 
js正则验证会计公式因工作要求,需要验证会计使用的公式,写了一个js类,在此一做记录/*********************

js正则验证会计公式
因工作要求,需要验证会计使用的公式,写了一个js类,在此一做记录

/************************************************** * 此类用来验证公式合法性<br> * 公式输入说明:<br> * 1、可以输入数值常量。50、20.3<br> * 2、可以报表单元格列表中选取需要的单元格。R.001.A04<br> * 3、可以使用+,-,*,/运算符和括号(,)。<br> * <br> * 正确公式示例:<br> * //正确公式 (R.001.A04+R.001.A04+R.001.A03)/50-R.001.A06/8.05*166 <br>  * //错误公式 (R.0011.A04+R.001.A04+R.001.A03)/50-R.001.A06/8.05*166<br> * <br> * <br> * 使用示例:<br> * 创建公式<br> * var tStr = "(R.001.A04+R.001.A04+R.001.A03)/50-R.001.A06/8.05*166";<br> * 创建验证公式对象<br> * var fromsV = new FromsUtil();<br> * 调用验证方法<br> * fromsV.validateFroms(tStr);<br> * 取得验证结果<br> * alert(fromsV.validateFlag);<br> * <br> *************************************************/FromsUtil = function() {//加、减、乘、除  this.patt = /[+\-\/\*]/;  //验证公式元素:R.001.A04--(R.001.A04--R.001.A04)--22--22.22  //var patt2 = /^\({0,}R\.\d{3}\.[A-Z]\d{2}\){0,}$|^\d{1,}$|^\d{1,}\.\d{1,}$/;  //常量前后也可有括号   this.patt2 = /^\({0,}R\.\d{3}\.[A-Z]\d{2}\){0,}$|^\({0,}\d{1,}\){0,}$|^\({0,}\d{1,}\.\d{1,}\){0,}$/;   //验证结果  this.validateFlag = true;  //括号个数  this.patt3 = /\(/g;  this.patt4 = /\)/g;  var leftBracket=0;  var rigthBracket=0;   var count = 0; //递归次数--来确定是否有计算符号  //验证公式的主要方法this.validateFroms = function (str) {  //取得匹配的字符串  var tem1 = str.match(this.patt);  //alert(tem1);  //假如为空为最后一个元素  if(tem1 == null) {  //假如无计算符返回false  if(count==0) {  if(str.match(this.patt) == null) {    this.validateFlag = false;  return;  }  }  //验证最后一个元素  if(!(this.patt2.test(str))) {  this.validateFlag = this.patt2.test(str);  return;    }  //取得括号的个数  while (this.patt3.exec(str) != null)  {  leftBracket++;    }  while (this.patt4.exec(str) != null)  {  rigthBracket++;    }  //验证括号个烽  if(leftBracket!=rigthBracket) {  this.validateFlag=false;  }  return;  };  //取得位置  var index = str.indexOf(tem1);  //取得要验证的字符串    var str1=str.substring(0,index);  //alert(str1);  //alert(patt2.test(str1));  //验证结果  if(!(this.patt2.test(str1))) {  this.validateFlag = this.patt2.test(str1);  return;  }  //取得括号的个数  while (this.patt3.exec(str1) != null)  {  leftBracket++;    }  while (this.patt4.exec(str1) != null)  {  rigthBracket++;    }  count ++;  //使用递归  var str2=str.substring(index+1,str.length);    this.validateFroms(str2);  }}

热点排行