因工作要求,需要验证会计使用的公式,写了一个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);
}
}
分享到:
相关推荐
本资源包“JS input正则验证大全”主要聚焦于使用JavaScript进行输入框(input)的各种类型的数据验证,包括英文、中文、邮箱、手机号、银行卡和身份证等常见字段的正则校验规则。以下是对这些知识点的详细说明: 1...
**JS正则验证表单**是前端开发中一个至关重要的环节,主要用于确保用户输入的数据符合预设的格式,从而提高数据质量和应用安全性。在本文中,我们将深入探讨JavaScript中的正则表达式及其在表单验证中的应用。 正则...
一个正则表达式验证格式的方法 你一个可以调用的demo valid(str,tostr) str:字符串 tostr:格式 yy-mm-dd 支持.,/,-三种格式。
常用正则验证,各种常用验证包含,汉字、手机号、电话号码、email、金额、特殊字符等常见完整js类库。
本文将深入探讨几种常见的JavaScript(简称JS)正则表达式验证方法,以身份证号和出生日期为例,解析其背后的逻辑和技术细节。 #### 身份证号的JS正则表达式验证 身份证号通常有两种格式:15位和18位。15位身份证...
JavaScript(JS)与正则表达式(RegEx)的结合使用,可以实现强大的客户端验证功能,有效提升用户体验,减轻服务器负担。同时,HTML5引入了新的表单验证API,为表单验证提供了原生支持。 **一、JavaScript正则验证*...
在本案例中,我们关注的是使用jQuery(jq)进行非空验证,以及使用JavaScript(js)的正则表达式来验证邮箱和手机号码的正确性。以下是关于这些知识点的详细说明: 1. **jQuery(jq)非空验证**: jQuery是一种轻...
【标题】:“AutoIt 正则验证工具” 【描述】中的“AutoIt 正则验证工具”是一款基于AutoIt编程语言开发的实用程序,它的主要功能是通过穷举的方法来测试和验证正则表达式的完备性和正确性。正则表达式(Regular ...
描述中提到的"最全最实用的正则验证插件,含调用示例"可能指的是一个JavaScript库或者工具,它提供了预设的正则表达式模式,并且包含了如何在实际项目中调用和应用这些规则的示例代码。例如,`vstorly.js`可能是这个...
"JS正则验证大全 (.Net客户端验证)"这个资源集成了多种常见的JavaScript正则表达式,用于各种常见数据类型的验证,如电子邮件、电话号码、日期等。 正则表达式(Regular Expression)是模式匹配工具,可以用来进行...
本资料包“js正则表达式和验证方法”显然是为了帮助开发者和初学者更好地理解和运用JavaScript中的正则表达式及相关验证技巧。 1. **基础概念** - 正则表达式是由字符、元字符和量词组成的模式,用于匹配字符串。 ...
在JavaScript(JS)中,正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作。在“js正则练习-账号密码邮箱匹配”的场景中,我们需要编写正则表达式来验证用户输入的账号、密码和邮箱是否符合特定的...
js正则表达式表单验证小案例
**最主要特点可以把正则后的结果加亮显示** 简单易用的HTML形式: 1....有很多正则库 3.支持多种浏览器IE FF 都测试成功 <br>无论你是新手还是高手一旦拥有它你会更随意的去运用正则表达式的!
比较实用的javascript做的表单验证,验证的表单域包括用户名、密码、密码确认、密码提示问题、邮箱、手机号码、身份证。表单域基本通过获得焦点显示...提交表单先进行必填项不能为空验证,再进行正则表达式匹配验证。
本文将深入探讨如何自定义一个文本框控件,实现自定义的正则表达式验证规则,以提高应用程序的数据输入质量。 首先,我们要明白WPF中的验证机制。在WPF中,数据验证通常是通过数据绑定的`Binding`对象来实现的,它...
在这个"JavaScript正则验证手机格式Demo"中,我们将探讨如何利用JavaScript的正则表达式功能来验证输入的字符串是否符合中国大陆手机号码的标准格式。 中国大陆的手机号码通常由11位数字组成,且以1开头,常见的有...
本案例“JS正则验证注册表单”聚焦于利用JavaScript的正则表达式进行前端验证,主要涉及到手机号码、验证码、身份证号、用户名和密码等常见字段的验证。下面将详细介绍这些知识点。 1. **正则表达式**:正则表达式...
根据提供的文件信息,本文将详细解释如何使用JavaScript中的正则表达式来验证手机号、座机号以及电子邮件地址的格式。 ### 一、正则表达式基础 在深入了解具体实现之前,我们先简单回顾一下正则表达式的概念。正则...