这个东西,不知道大家有没有兴趣,大概用了10天,把快速原型搭建出来了。我想,即使以后领导不用,也都可以用这个思路,把struts或者其他的validator扩展到真正的web级别上
下面是一个示范,省略了通用的javascript控制部分,省略了java级别检查,这些都已经做到了
validator定义: <?xml version="1.0" encoding="GBK"?> <!-- 当该文件生效时,所有的表单设置,与本xml冲突的均会被修改为一致 --> <!-- needjs默认true --> <form name="action1" action="test1_submit.jsp" needjs="true"> <!-- color在未来再做可配置,快速原型放弃 --> <LostFocusColor/> <GetFocusColor/> <!-- global规则定义,对任意多个global来说,constant的name都应该是唯一的 --> <global>validator//global1.xml</global> <!-- required默认false,spacetrim默认true --> <field name="username" info="xxx" required="true" spacetrim="true"> <message> 用户名不允许为空,且必须为字母和数字组成。 </message> <validator> ^[A-Za-z0-9]+$ </validator> </field> <field name="password" required="true" spacetrim="true"> <message> 密码最少3位,最长8位,必须全数字。 </message> <validator-constant> num38 </validator-constant> <!-- 表示强制约束关系,equal表示必须相等,默认为false,当equal为true,则validator节点无效 --> <!-- 支持多个otherfield节点 --> <otherfield name="password1" equal="true"> <!-- 当无validator-condition表示任意的条件都可以 --> <!-- 现在只支持一个validator节点 --> <validator validator-condition="^[A-Za-z0-9]+$"> ^[A-Za-z0-9]+$ </validator> </otherfield> </field> <field name="password1"> <message> 重复密码最少3位,最长8位,必须全数字,必须与密码一致。 </message> <validator-constant> num38 </validator-constant> </field> <field name="btnSubmit"> </field> </form>
生成的javascript代码: <!-- validator自动机开始 --> <SCRIPT Language="JavaScript" src="/validator/validator.js"></SCRIPT> <script> var validator_formname='newadslwithtel'; if(document.newadslwithtel==null){validator_log('error:未能找到validator申明的form name');} document.newadslwithtel.action='testnewadslwithtel_submit.jsp'; validator_autoinit('newadslwithtel'); var validator_re; //正则对象 var validator_es=document.newadslwithtel.elements; //整个form中field的数组 function validator_bChkField(elem){ var validator_value=validator_getvalue(elem); if(elem.name=='ZRMC'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:用户名称不允许为空,长度最大为10。'); return false; } //正则,当是checkbox的时候,用validator_value代替 validator_re=new RegExp("^[^\f\n\r\t\v]{0,10}$"); if(!validator_re.test(validator_value)){ validator_log('error:用户名称不允许为空,长度最大为10。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='ZRLX'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:用户类型必选一个。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='ZRLR'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:联系人不允许为空,长度最大为10。'); return false; } //正则,当是checkbox的时候,用validator_value代替 validator_re=new RegExp("^[^\f\n\r\t\v]{0,10}$"); if(!validator_re.test(validator_value)){ validator_log('error:联系人不允许为空,长度最大为10。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='ZRDH'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:联系电话不允许为空,长度最大为20。'); return false; } //正则,当是checkbox的时候,用validator_value代替 validator_re=new RegExp("^[^\f\n\r\t\v]{0,20}$"); if(!validator_re.test(validator_value)){ validator_log('error:联系电话不允许为空,长度最大为20。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='ZRMM'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。'); return false; } //global if(!validator_constant_telpassword_check(validator_value)){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='ZRMM1'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。'); return false; } //global if(!validator_constant_telpassword_check(validator_value)){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。'); return false; } //other equal if(validator_value!=validator_getvalue(validator_es('ZRMM'))){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_1'){ } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_15'){ } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_TXC1_15'){ //other 正则 var validator_otherfield_condition=false; validator_re=new RegExp("-1"); validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15'))); if(validator_otherfield_condition){ validator_re=new RegExp("-1"); if(!validator_re.test(validator_value)){ validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。'); return false; } } //other 正则 var validator_otherfield_condition=false; validator_re=new RegExp("0"); validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15'))); if(validator_otherfield_condition){ validator_re=new RegExp("^[123]+$"); if(!validator_re.test(validator_value)){ validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。'); return false; } } } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_22'){ } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_12'){ } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_20'){ } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_TXC1_116'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_TX_TXC1_116_1'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //other equal if(validator_value!=validator_getvalue(validator_es('Tel_TX_TXC1_116'))){ validator_log('error:呼出加锁密码在选择了长途或市内呼出加锁时必须填4位数字且两次输入一致,否则必须不填。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_ZHZH'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:银行帐号必填,必须全数字,长度小于20位。'); return false; } //正则,当是checkbox的时候,用validator_value代替 validator_re=new RegExp("^[0-9]{0,20}$"); if(!validator_re.test(validator_value)){ validator_log('error:银行帐号必填,必须全数字,长度小于20位。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='Tel_ZHZH1'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。'); return false; } //正则,当是checkbox的时候,用validator_value代替 validator_re=new RegExp("^[0-9]{0,20}$"); if(!validator_re.test(validator_value)){ validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。'); return false; } //other equal if(validator_value!=validator_getvalue(validator_es('Tel_ZHZH'))){ validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。'); return false; } } var validator_value=validator_getvalue(elem); if(elem.name=='ADSL_ZRDL'){ //trim操作,只对text和password做 if(null!=elem.type && ('text'==elem.type || 'password'==elem.type)){ elem.value=validator_trim(elem.value); validator_value=elem.value; } //空值判断 if(null==validator_value || ''==validator_value){ validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。'); return false; } //正则,当是checkbox的时候,用validator_value代替 validator_re=new RegExp("sz[0-9a-z]{0,6}$"); if(!validator_re.test(validator_value)){ validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。'); return false; } } return true; } function validator_submit(formname){ var validator_value=validator_getvalue(validator_es('ZRMC')); validator_es('ZRMC').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:用户名称不允许为空,长度最大为10。'); validator_makeFocus(validator_es('ZRMC'),'newadslwithtel'); return false; } validator_re=new RegExp("^[^\f\n\r\t\v]{0,10}$"); if(!validator_re.test(validator_value)){ validator_log('error:用户名称不允许为空,长度最大为10。'); validator_makeFocus(validator_es('ZRMC'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('ZRLX')); validator_es('ZRLX').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:用户类型必选一个。'); validator_makeFocus(validator_es('ZRLX'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('ZRLR')); validator_es('ZRLR').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:联系人不允许为空,长度最大为10。'); validator_makeFocus(validator_es('ZRLR'),'newadslwithtel'); return false; } validator_re=new RegExp("^[^\f\n\r\t\v]{0,10}$"); if(!validator_re.test(validator_value)){ validator_log('error:联系人不允许为空,长度最大为10。'); validator_makeFocus(validator_es('ZRLR'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('ZRDH')); validator_es('ZRDH').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:联系电话不允许为空,长度最大为20。'); validator_makeFocus(validator_es('ZRDH'),'newadslwithtel'); return false; } validator_re=new RegExp("^[^\f\n\r\t\v]{0,20}$"); if(!validator_re.test(validator_value)){ validator_log('error:联系电话不允许为空,长度最大为20。'); validator_makeFocus(validator_es('ZRDH'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('ZRMM')); validator_es('ZRMM').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。'); validator_makeFocus(validator_es('ZRMM'),'newadslwithtel'); return false; } if(!validator_constant_telpassword_check(validator_value)){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位。'); validator_makeFocus(validator_es('ZRMM'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('ZRMM1')); validator_es('ZRMM1').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。'); validator_makeFocus(validator_es('ZRMM1'),'newadslwithtel'); return false; } if(!validator_constant_telpassword_check(validator_value)){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。'); validator_makeFocus(validator_es('ZRMM1'),'newadslwithtel'); return false; } if(validator_value!=validator_getvalue(validator_es('ZRMM'))){ validator_log('error:电话服务密码不允许为空,必须全数字,必须6位,必须两次输入的密码一致。'); validator_makeFocus(validator_es('ZRMM1'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('Tel_TX_1')); var validator_value=validator_getvalue(validator_es('Tel_TX_15')); var validator_value=validator_getvalue(validator_es('Tel_TX_TXC1_15')); var validator_otherfield_condition=false; validator_re=new RegExp("-1"); validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15'))); if(validator_otherfield_condition){ validator_re=new RegExp("-1"); if(!validator_re.test(validator_value)){ validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。'); validator_makeFocus(validator_es('Tel_TX_TXC1_15'),'newadslwithtel'); return false; } } var validator_otherfield_condition=false; validator_re=new RegExp("0"); validator_otherfield_condition=validator_re.test(validator_getvalue(validator_es('Tel_TX_15'))); if(validator_otherfield_condition){ validator_re=new RegExp("^[123]+$"); if(!validator_re.test(validator_value)){ validator_log('error:缩位拨号位数,当选择了缩位拨号必选,否则必须选择为-无缩位拨号。'); validator_makeFocus(validator_es('Tel_TX_TXC1_15'),'newadslwithtel'); return false; } } var validator_value=validator_getvalue(validator_es('Tel_TX_22')); var validator_value=validator_getvalue(validator_es('Tel_TX_12')); var validator_value=validator_getvalue(validator_es('Tel_TX_20')); var validator_value=validator_getvalue(validator_es('Tel_TX_TXC1_116')); validator_es('Tel_TX_TXC1_116').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); var validator_value=validator_getvalue(validator_es('Tel_TX_TXC1_116_1')); validator_es('Tel_TX_TXC1_116_1').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(validator_value!=validator_getvalue(validator_es('Tel_TX_TXC1_116'))){ validator_log('error:呼出加锁密码在选择了长途或市内呼出加锁时必须填4位数字且两次输入一致,否则必须不填。'); validator_makeFocus(validator_es('Tel_TX_TXC1_116_1'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('Tel_ZHZH')); validator_es('Tel_ZHZH').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:银行帐号必填,必须全数字,长度小于20位。'); validator_makeFocus(validator_es('Tel_ZHZH'),'newadslwithtel'); return false; } validator_re=new RegExp("^[0-9]{0,20}$"); if(!validator_re.test(validator_value)){ validator_log('error:银行帐号必填,必须全数字,长度小于20位。'); validator_makeFocus(validator_es('Tel_ZHZH'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('Tel_ZHZH1')); validator_es('Tel_ZHZH1').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。'); validator_makeFocus(validator_es('Tel_ZHZH1'),'newadslwithtel'); return false; } validator_re=new RegExp("^[0-9]{0,20}$"); if(!validator_re.test(validator_value)){ validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。'); validator_makeFocus(validator_es('Tel_ZHZH1'),'newadslwithtel'); return false; } if(validator_value!=validator_getvalue(validator_es('Tel_ZHZH'))){ validator_log('error:银行帐号必填,必须全数字,长度小于20位,且两次输入必须一致。'); validator_makeFocus(validator_es('Tel_ZHZH1'),'newadslwithtel'); return false; } var validator_value=validator_getvalue(validator_es('ADSL_ZRDL')); validator_es('ADSL_ZRDL').value=validator_trim(validator_value); validator_value=validator_trim(validator_value); if(null==validator_value || ''==validator_value){ validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。'); validator_makeFocus(validator_es('ADSL_ZRDL'),'newadslwithtel'); return false; } validator_re=new RegExp("sz[0-9a-z]{0,6}$"); if(!validator_re.test(validator_value)){ validator_log('error:ADSL业务登录名必须8位内的小写字母或数字,同时必须sz开头,必须与已有的登录名不重复。'); validator_makeFocus(validator_es('ADSL_ZRDL'),'newadslwithtel'); return false; } return true; } function validator_constant_num38_check(value){ value=validator_trim(value); if(null==value || ''==value){ return false; } validator_re=new RegExp("^[0-9]{3,8}$"); if(!validator_re.test(value)){ return false; } return true; } function validator_constant_telpassword_check(value){ value=validator_trim(value); if(null==value || ''==value){ return false; } validator_re=new RegExp("^[0-9]{6}$"); if(!validator_re.test(value)){ return false; } return true; } </script> <!-- validator自动机结束 -->
[code] // 在此输入java代码
|