javascript級的validaotr

crogers發表於2003-11-07

這個東西,不知道大家有沒有興趣,大概用了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自動機結束 -->

<p class="indent">[code]
// 在此輸入java程式碼
<p class="indent">
[/code]

相關文章