表单验证类

本文介绍了一个名为Validatorv1.0的表单验证类,该类能够对各种类型的表单输入进行有效性检查,包括但不限于中文姓名、英文名、网址、邮箱等,并提供了三种不同的验证模式。
<title>表单验证类Validatorv1.0</title>
<style>
body,td{font:normal12pxVerdana;color:#333333}
input,textarea,select,td{font:normal12pxVerdana;color:#333333;border:1pxsolid#999999;background:#ffffff}
table{border-collapse:collapse;}
td{padding:3px}
input{height:20;}
textarea{width:80%;height:50px;overflow:auto;}
form{display:inline}
</style>
<tablealign="center">
<formname="theForm"id="demo"action=""method="get"onSubmit="returnValidator.Validate(this,2)">
<tr>
<td>真实姓名:</td><td><inputname="Name"dataType="Chinese"msg="真实姓名只允许中文"></td>
</tr>
<tr>
<td>英文名:</td><td><inputname="Nick"dataType="English"require="false"msg="英文名只允许英文字母"></td>
</tr>
<tr>
<td>主页:</td><td><inputname="Homepage"require="false"dataType="Url"msg="非法的Url"></td>
</tr>
<tr>
<td>密码:</td><td><inputname="Password"dataType="SafeString"msg="密码不符合安全规则"type="password"></td>
</tr>
<tr>
<td>重复:</td><td><inputname="Repeat"dataType="Repeat"to="Password"msg="两次输入的密码不一致"type="password"></td>
</tr>
<tr>
<td>信箱:</td><td><inputname="Email"dataType="Email"msg="信箱格式不正确"></td>
</tr>
<tr>
<td>信箱:</td><td><inputname="Email"dataType="Repeat"to="Email"msg="两次输入的信箱不一致"></td>
</tr>
<tr>
<td>QQ:</td><td><inputname="QQ"require="false"dataType="QQ"msg="QQ号码不存在"></td>
</tr>
<tr>
<td>身份证:</td><td><inputname="Card"dataType="IdCard"msg="身份证号码不正确"></td>
</tr>
<tr>
<td>年龄:</td><td><inputname="Year"dataType="Range"msg="年龄必须在18~28之间"min="18"max="28"></td>
</tr>
<tr>
<td>年龄1:</td><td><inputname="Year1"require="false"dataType="Compare"msg="年龄必须在18以上"to="18"operator="GreaterThanEqual"></td>
</tr>
<tr>
<td>电话:</td><td><inputname="Phone"require="false"dataType="Phone"msg="电话号码不正确"></td>
</tr>
<tr>
<td>手机:</td><td><inputname="Mobile"require="false"dataType="Mobile"msg="手机号码不正确"></td>
</tr>
<tr>
<td>生日:</td><td><inputname="Birthday"dataType="Date"format="ymd"msg="生日日期不存在"></td>
</tr>
<tr>
<td>邮政编码:</td><td><inputname="Zip"dataType="Custom"regexp="^[1-9]\d{5}$"msg="邮政编码不存在"></td>
</tr>
<tr>
<td>邮政编码:</td><td><inputname="Zip1"dataType="Zip"msg="邮政编码不存在"></td>
</tr>
<tr>
<td>操作系统:</td><td><selectname="Operation"dataType="Require"msg="未选择所用操作系统"><optionvalue="">选择您所用的操作系统</option><optionvalue="Win98">Win98</option><optionvalue="Win2k">Win2k</option><optionvalue="WinXP">WinXP</option></select></td>
</tr>
<tr>
<td>所在省份:</td><td>广东<inputname="Province"value="1"type="radio">陕西<inputname="Province"value="2"type="radio">浙江<inputname="Province"value="3"type="radio">江西<inputname="Province"value="4"type="radio"dataType="Group"msg="必须选定一个省份"></td>
</tr>
<tr>
<td>爱好:</td><td>运动<inputname="Favorite"value="1"type="checkbox">上网<inputname="Favorite"value="2"type="checkbox">听音乐<inputname="Favorite"value="3"type="checkbox">看书<inputname="Favorite"value="4"type="checkbox""dataType="Group"min="2"max="3"msg="必须选择2~3种爱好"></td>
</tr>
<td>自我介绍:</td><td><textareaname="Description"dataType="Limit"max="10"msg="自我介绍内容必须在10个字之内">中文是一个字</textarea></td>
</tr>
<td>自传:</td><td><textareaname="History"dataType="LimitB"min="3"max="10"msg="自传内容必须在[3,10]个字节之内">中文是两个字节t</textarea></td>
</tr>
<tr>
<tdcolspan="2"><inputname="Submit"type="submit"value="确定提交"><inputonClick="Validator.Validate(document.getElementById('demo'))"value="检验模式1"type="button"><inputonClick="Validator.Validate(document.getElementById('demo'),2)"value="检验模式2"type="button"><inputonClick="Validator.Validate(document.getElementById('demo'),3)"value="检验模式3"type="button"></td>
</tr>
</form>
</table>
<script>
/*************************************************
Validatorv1.0
codyby我佛山人
wfsr@cunite.com
http://www.cunite.com
*************************************************/
Validator={
Require:/.+/,
Email:/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/,
Phone:/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,
Mobile:/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/,
Url:/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
IdCard:/^\d{15}(\d{2}[A-Za-z0-9])?$/,
Currency:/^\d+(\.\d+)?$/,
Number:/^\d+$/,
Zip:/^[1-9]\d{5}$/,
QQ:/^[1-9]\d{4,8}$/,
Integer:/^[-\+]?\d+$/,
Double:/^[-\+]?\d+(\.\d+)?$/,
English:/^[A-Za-z]+$/,
Chinese:/^[\u0391-\uFFE5]+$/,
UnSafe:/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
IsSafe:function(str){return!this.UnSafe.test(str);},
SafeString:"this.IsSafe(value)",
Limit:"this.limit(value.length,getAttribute('min'),getAttribute('max'))",
LimitB:"this.limit(this.LenB(value),getAttribute('min'),getAttribute('max'))",
Date:"this.IsDate(value,getAttribute('min'),getAttribute('format'))",
Repeat:"value==document.getElementsByName(getAttribute('to'))[0].value",
Range:"getAttribute('min')<value&&value<getAttribute('max')",
Compare:"this.compare(value,getAttribute('operator'),getAttribute('to'))",
Custom:"this.Exec(value,getAttribute('regexp'))",
Group:"this.MustChecked(getAttribute('name'),getAttribute('min'),getAttribute('max'))",
ErrorItem:[document.forms[0]],
ErrorMessage:["以下原因导致提交失败:\t\t\t\t"],
Validate:function(theForm,mode){
varobj=theForm||event.srcElement;
varcount=obj.elements.length;
this.ErrorMessage.length=1;
this.ErrorItem.length=1;
this.ErrorItem[0]=obj;
for(vari=0;i<count;i++){
with(obj.elements[i]){
var_dataType=getAttribute("dataType");
if(typeof(_dataType)=="object"||typeof(this[_dataType])=="undefined")continue;
this.ClearState(obj.elements[i]);
if(getAttribute("require")=="false"&&value=="")continue;
switch(_dataType){
case"Date":
case"Repeat":
case"Range":
case"Compare":
case"Custom":
case"Group":
case"Limit":
case"LimitB":
case"SafeString":
if(!eval(this[_dataType])){
this.AddError(i,getAttribute("msg"));
}
break;
default:
if(!this[_dataType].test(value)){
this.AddError(i,getAttribute("msg"));
}
break;
}
}
}
if(this.ErrorMessage.length>1){
mode=mode||1;
varerrCount=this.ErrorItem.length;
switch(mode){
case2:
for(vari=1;i<errCount;i++)
this.ErrorItem[i].style.color="red";
case1:
alert(this.ErrorMessage.join("\n"));
this.ErrorItem[1].focus();
break;
case3:
for(vari=1;i<errCount;i++){
try{
varspan=document.createElement("SPAN");
span.id="__ErrorMessagePanel";
span.style.color="red";
this.ErrorItem[i].parentNode.appendChild(span);
span.innerHTML=this.ErrorMessage[i].replace(/\d+:/,"*");
}
catch(e){alert(e.description);}
}
this.ErrorItem[1].focus();
break;
default:
alert(this.ErrorMessage.join("\n"));
break;
}
returnfalse;
}
returntrue;
},
limit:function(len,min,max){
min=min||0;
max=max||Number.MAX_VALUE;
returnmin<=len&&len<=max;
},
LenB:function(str){
returnstr.replace(/[^\x00-\xff]/g,"**").length;
},
ClearState:function(elem){
with(elem){
if(style.color=="red")
style.color="";
varlastNode=parentNode.childNodes[parentNode.childNodes.length-1];
if(lastNode.id=="__ErrorMessagePanel")
parentNode.removeChild(lastNode);
}
},
AddError:function(index,str){
this.ErrorItem[this.ErrorItem.length]=this.ErrorItem[0].elements[index];
this.ErrorMessage[this.ErrorMessage.length]=this.ErrorMessage.length+":"+str;
},
Exec:function(op,reg){
returnnewRegExp(reg,"g").test(op);
},
compare:function(op1,operator,op2){
switch(operator){
case"NotEqual":
return(op1!=op2);
case"GreaterThan":
return(op1>op2);
case"GreaterThanEqual":
return(op1>=op2);
case"LessThan":
return(op1<op2);
case"LessThanEqual":
return(op1<=op2);
default:
return(op1==op2);
}
},
MustChecked:function(name,min,max){
vargroups=document.getElementsByName(name);
varhasChecked=0;
min=min||1;
max=max||groups.length;
for(vari=groups.length-1;i>=0;i--)
if(groups[i].checked)hasChecked++;
returnmin<=hasChecked&&hasChecked<=max;
},
IsDate:function(op,formatString){
formatString=formatString||"ymd";
varm,year,month,day;
switch(formatString){
case"ymd":
m=op.match(newRegExp("^\\s*((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})\\s*$"));
if(m==null)returnfalse;
day=m[6];
month=m[5]--;
year=(m[2].length==4)?m[2]:GetFullYear(parseInt(m[3],10));
break;
case"dmy":
m=op.match(newRegExp("^\\s*(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$"));
if(m==null)returnfalse;
day=m[1];
month=m[3]--;
year=(m[5].length==4)?m[5]:GetFullYear(parseInt(m[6],10));
break;
default:
break;
}
vardate=newDate(year,month,day);
return(typeof(date)=="object"&&year==date.getFullYear()&&month==date.getMonth()&&day==date.getDate());
functionGetFullYear(y){return((y<30?"20":"19")+y)|0;}
}
}
</script>
内容概要:本文介绍了一个基于Matlab的综合能源系统优化调度仿真资源,重点实现了含光热电站、有机朗肯循环(ORC)和电含光热电站、有机有机朗肯循环、P2G的综合能源优化调度(Matlab代码实现)转气(P2G)技术的冷、热、电多能互补系统的优化调度模型。该模型充分考虑多种能源形式的协同转换与利用,通过Matlab代码构建系统架构、设定约束条件并求解优化目标,旨在提升综合能源系统的运行效率与经济性,同时兼顾灵活性供需不确定性下的储能优化配置问题。文中还提到了相关仿真技术支持,如YALMIP工具包的应用,适用于复杂能源系统的建模与求解。; 适合人群:具备一定Matlab编程基础和能源系统背景知识的科研人员、研究生及工程技术人员,尤其适合从事综合能源系统、可再生能源利用、电力系统优化等方向的研究者。; 使用场景及目标:①研究含光热、ORC和P2G的多能系统协调调度机制;②开展考虑不确定性的储能优化配置与经济调度仿真;③学习Matlab在能源系统优化中的建模与求解方法,复现高水平论文(如EI期刊)中的算法案例。; 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码和案例文件,按照目录顺序逐步学习,重点关注模型构建逻辑、约束设置与求解器调用方式,并通过修改参数进行仿真实验,加深对综合能源系统优化调度的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值