javascript 驗證,全正則匹配


這裏一併請教了,大家以後查閱
function   chknum(NUM)
{
var   i,j,strTemp;
strTemp= ".0123456789 ";
if   (   NUM.length==   0)
return   0
for   (i=0;i <NUM.length;i++)
{
j=strTemp.indexOf(NUM.charAt(i));
if   (j==-1)
{
return   0;
}
}

return   1;
}
這是判斷數字的
Validator目前可實現的驗證類型有:  
1.是否爲空;
2.中文字符;
3.雙字節字符
4.英文;
5.數字;
6.整數;
7.實數;
8.Email地址;
9.使用HTTP協議的網址;
10.電話號碼;
11.貨幣;
12.手機號碼;
13.郵政編碼;
14.身份證號碼(1.05增強);
15.QQ號碼;
16.日期;
17.符合安全規則的密碼;
18.某項的重複值;
19.兩數的關係比較;
20.判斷輸入值是否在(n,   m)區間;
21.輸入字符長度限制(可按字節比較);
22.對於具有相同名稱的單選按鈕的選中判斷;
23.限制具有相同名稱的多選按鈕的選中數目;
24.自定義的正則表達式驗證;
25.文件上傳格式過濾(1.04新增)。  
<script>
/*************************************************
Validator   v1.05
[email protected]
*************************************************/
Validator   =   {
Require   :   /.+/,
Email   :   /^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$/,
Phone   :   /^((/(/d{2,3}/))|(/d{3}/-))?(/(0/d{2,3}/)|0/d{2,3}-)?[1-9]/d{6,7}(/-/d{1,4})?$/,
Mobile   :   /^((/(/d{2,3}/))|(/d{3}/-))?13/d{9}$/,
Url   :   /^http:////[A-Za-z0-9]+/.[A-Za-z0-9]+[//=/?%/-&_~`@[/]/ ':+!]*([^ <> / "/ "])*$/,
IdCard   :   "this.IsIdCard(value) ",
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]+$/,
Username   :   /^[a-z]/w{3,}$/i,
UnSafe   :   /^(([A-Z]*|[a-z]*|/d*|[-_/~!@#/$%/^&/*/./(/)/[/]/{/} <> /?///// '/ "]*)|.{0,5})$|/s/,
IsSafe   :   function(str){return   !this.UnSafe.test(str);},
SafeString   :   "this.IsSafe(value) ",
Filter   :   "this.DoFilter(value,   getAttribute( 'accept ')) ",
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|0)   &&   (value|0)   <   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){
var   obj   =   theForm   ||   event.srcElement;
var   count   =   obj.elements.length;
this.ErrorMessage.length   =   1;
this.ErrorItem.length   =   1;
this.ErrorItem[0]   =   obj;
for(var   i=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   "IdCard "   :
case   "Date "   :
case   "Repeat "   :
case   "Range "   :
case   "Compare "   :
case   "Custom "   :
case   "Group "   :  
case   "Limit "   :
case   "LimitB "   :
case   "SafeString "   :
case   "Filter "   :
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;
var   errCount   =   this.ErrorItem.length;
switch(mode){
case   2   :
for(var   i=1;i <errCount;i++)
this.ErrorItem[i].style.color   =   "red ";
case   1   :
alert(this.ErrorMessage.join( "/n "));
this.ErrorItem[1].focus();
break;
case   3   :
for(var   i=1;i <errCount;i++){
try{
var   span   =   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;
}
return   false;
}
return   true;
},
limit   :   function(len,min,   max){
min   =   min   ||   0;
max   =   max   ||   Number.MAX_VALUE;
return   min   <=   len   &&   len   <=   max;
},
LenB   :   function(str){
return   str.replace(/[^/x00-/xff]/g, "** ").length;
},
ClearState   :   function(elem){
with(elem){
if(style.color   ==   "red ")
style.color   =   " ";
var   lastNode   =   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){
return   new   RegExp(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){
var   groups   =   document.getElementsByName(name);
var   hasChecked   =   0;
min   =   min   ||   1;
max   =   max   ||   groups.length;
for(var   i=groups.length-1;i> =0;i--)
if(groups[i].checked)   hasChecked++;
return   min   <=   hasChecked   &&   hasChecked   <=   max;
},
DoFilter   :   function(input,   filter){
return   new   RegExp( "^.+/.(?=EXT)(EXT)$ ".replace(/EXT/g,   filter.split(//s*,/s*/).join( "| ")),   "gi ").test(input);
},
IsIdCard   :   function(number){
var   date,   Ai;
var   verify   =   "10x98765432 ";
var   Wi   =   [7,   9,   10,   5,   8,   4,   2,   1,   6,   3,   7,   9,   10,   5,   8,   4,   2];
var   area   =   [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '北京 ', '天津 ', '河北 ', '山西 ', '內蒙古 ', ' ', ' ', ' ', ' ', ' ', '遼寧 ', '吉林 ', '黑龍江 ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '上海 ', '江蘇 ', '浙江 ', '安微 ', '福建 ', '江西 ', '山東 ', ' ', ' ', ' ', '河南 ', '湖北 ', '湖南 ', '廣東 ', '廣西 ', '海南 ', ' ', ' ', ' ', '重慶 ', '四川 ', '貴州 ', '雲南 ', '西藏 ', ' ', ' ', ' ', ' ', ' ', ' ', '陝西 ', '甘肅 ', '青海 ', '寧夏 ', '新疆 ', ' ', ' ', ' ', ' ', ' ', '臺灣 ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '香港 ', '澳門 ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '國外 '];
var   re   =   number.match(/^(/d{2})/d{4}(((/d{2})(/d{2})(/d{2})(/d{3}))|((/d{4})(/d{2})(/d{2})(/d{3}[x/d])))$/i);
if(re   ==   null)   return   false;
if(re[1]   > =   area.length   ||   area[re[1]]   ==   " ")   return   false;
if(re[2].length   ==   12){
Ai   =   number.substr(0,   17);
date   =   [re[9],   re[10],   re[11]].join( "- ");
}
else{
Ai   =   number.substr(0,   6)   +   "19 "   +   number.substr(6);
date   =   [ "19 "   +   re[4],   re[5],   re[6]].join( "- ");
}
if(!this.IsDate(date,   "ymd "))   return   false;
var   sum   =   0;
for(var   i   =   0;i <=16;i++){
sum   +=   Ai.charAt(i)   *   Wi[i];
}
Ai   +=   verify.charAt(sum%11);
return   (number.length   ==15   ||   number.length   ==   18   &&   number   ==   Ai);
},
IsDate   :   function(op,   formatString){
formatString   =   formatString   ||   "ymd ";
var   m,   year,   month,   day;
switch(formatString){
case   "ymd "   :
m   =   op.match(new   RegExp( "^((//d{4})|(//d{2}))([-./])(//d{1,2})//4(//d{1,2})$ "));
if(m   ==   null   )   return   false;
day   =   m[6];
month   =   m[5]*1;
year   =   (m[2].length   ==   4)   ?   m[2]   :   GetFullYear(parseInt(m[3],   10));
break;
case   "dmy "   :
m   =   op.match(new   RegExp( "^(//d{1,2})([-./])(//d{1,2})//2((//d{4})|(//d{2}))$ "));
if(m   ==   null   )   return   false;
day   =   m[1];
month   =   m[3]*1;
year   =   (m[5].length   ==   4)   ?   m[5]   :   GetFullYear(parseInt(m[6],   10));
break;
default   :
break;
}
if(!parseInt(month))   return   false;
month   =   month==0   ?12:month;
var   date   =   new   Date(year,   month-1,   day);
return   (typeof(date)   ==   "object "   &&   year   ==   date.getFullYear()   &&   month   ==   (date.getMonth()+1)   &&   day   ==   date.getDate());
function   GetFullYear(y){return   ((y <30   ?   "20 "   :   "19 ")   +   y)|0;}
}
}
</script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章