[转]检测表单

蓝色理想发现了一下好用的验证表单的代码。


PHP部分如下:

  1. <title>表单验证类 Validator for PHP β</title>
  2.  <style>
  3.  body,td{font:normal 12px Verdana;color:#333333}
  4.  input,textarea,select,td{font:normal 12px Verdana;color:#333333;border:1px solid #999999;background:#ffffff}
  5.  table{border-collapse:collapse;}
  6.  td{padding:3px}
  7.  input{height:20;}
  8.  textarea{width:80%;height:50px;overfmin:auto;}
  9.  form{display:inline}
  10.  </style>
  11.  <table align="center">
  12. <form action="Validator.php" method="post">
  13.   <tr>
  14.    <td>提示模式:</td><td>
  15.    <select name="emode">
  16.    <option value="1">警告提示框(客户端)</option>
  17.    <option value="2">提示框加红色文字提示</option>
  18.    <option value="3">附加红色提示</option>
  19.    <option value="4">警告提示框(服务器端)</option>
  20.    <option value="5">文字提示(服务器端)</option>
  21.    </select></td>
  22.   </tr>
  23.   <tr>
  24.    <td>真实姓名:</td><td><input name="Name"></td>
  25.   </tr>
  26.   <tr>
  27.    <td>英文名:</td><td><input name="Nick"></td>
  28.   </tr>
  29.     <tr>
  30.    <td>主页:</td><td><input name="Homepage"></td>
  31.   </tr>
  32.   <tr>
  33.    <td>密码:</td><td><input name="Password"></td>
  34.   </tr>
  35.   <tr>
  36.    <td>重复:</td><td><input name="Repeat"></td>
  37.   </tr>
  38.   <tr>
  39.    <td>信箱:</td><td><input name="Email"></td>
  40.   </tr>
  41.     <tr>
  42.    <td>信箱:</td><td><input name="Email1"></td>
  43.   </tr>
  44.   <tr>
  45.    <td>QQ:</td><td><input name="QQ"></td>
  46.   </tr>
  47.     <tr>
  48.    <td>身份证:</td><td><input name="Card"></td>
  49.   </tr>
  50.   <tr>
  51.    <td>年龄:</td><td><input name="Year"></td>
  52.   </tr>
  53.    <tr>
  54.    <td>年龄1:</td><td><input name="Year1"></td>
  55.   </tr>
  56.    <tr>
  57.    <td>电话:</td><td><input name="Phone"></td>
  58.   </tr>
  59.    <tr>
  60.    <td>手机:</td><td><input name="Mobile"></td>
  61.   </tr>
  62.      <tr>
  63.    <td>生日:</td><td><input name="Birthday"></td>
  64.   </tr>
  65.    <tr>
  66.    <td>邮政编码:</td><td><input name="Zip"></td>
  67.   </tr>
  68.   <tr>
  69.    <td>邮政编码:</td><td><input name="Zip1"></td>
  70.   </tr>
  71.   <tr>
  72.    <td>操作系统:</td><td><select name="OS"><option value="">选择您所用的操作系统</option><option value="Win98">Win98</option><option value="Win2k">Win2k</option><option value="WinXP">WinXP</option></select></td>
  73.   </tr>
  74.   <tr>
  75.    <td>所在省份:</td><td>广东<input name="Province" value="1" type="radio">陕西<input name="Province" value="2" type="radio">浙江<input name="Province" value="3" type="radio">江西<input name="Province" value="4" type="radio"></td>
  76.   </tr>
  77.   <tr>
  78.    <td>爱好:</td><td>运动<input name="Favorite" value="1" type="checkbox">上网<input name="Favorite" value="2" type="checkbox">听音乐<input name="Favorite" value="3" type="checkbox">看书<input name="Favorite" value="4" type="checkbox"></td>
  79.   </tr>
  80.    <td>自我介绍:</td><td><textarea name="Description">中文是一个字</textarea></td>
  81.   </tr>
  82.      <td>自传:</td><td><textarea name="History">中文是两个字节t</textarea></td>
  83.   </tr>
  84.   <tr>
  85.    <td colspan="2"><input name="Submit" type="submit" value="确定提交"></td>
  86.   </tr>
  87.   </form>
  88.  </table>
  89.  <script defer>
  90.  /*************************************************
  91. Validator for PHP  β 客户端脚本
  92. code by 我佛山人
  93. wfsr@cunite.com
  94. http://www.cunite.com
  95. *************************************************/
  96.  function dispError(items, messages, mode, separator){
  97. var iArray = items.split(separator);
  98. for(var i=iArray.length-1;i>=0;i--)
  99. iArray[i] = getObj(iArray[i]);
  100. messages = ("以下原因导致提交失败:\t\t\t\t" + separator + messages).split(separator);
  101. switch(mode){
  102. case 2 :
  103. for(i=iArray.length-1;i>=0;i--)
  104. iArray[i].style.color = "red";
  105. case 1 :
  106. alert(messages.join("\n"));
  107. iArray[0].focus();
  108. break;
  109. case 3 :
  110. for(i=iArray.length-1;i>=0;i--){
  111. try{
  112. var span = document.createElement("SPAN");
  113. span.id = "__ErrorMessagePanel";
  114. span.style.color = "red";
  115. iArray[i].parentNode.appendChild(span);
  116. span.innerHTML = messages[i+1].replace(/\d+:/,"*");
  117. }
  118. catch(e){alert(e.description);}
  119. }
  120. iArray[0].focus();
  121. break;
  122. }
  123.  }
  124.  
  125.  function getObj(name){
  126. var objs = document.getElementsByName(name);
  127. return objs[objs.length -1];
  128.  }
  129. </script>
  130. <?php
  131. class Validator{
  132. /*************************************************
  133. Validator for PHP  β 服务器端脚本
  134. code by 我佛山人
  135. wfsr@cunite.com
  136. http://www.cunite.com
  137. *************************************************/
  138. var $submit;
  139. var $error_item, $error_message, $error_mode, $error_no;
  140. function Validator($submit_name = "Submit", $mode = 5){
  141. $this->submit = $submit_name;
  142. $this->error_mode = $mode;
  143. $this->error_no = 1;
  144. }
  145.  
  146. function Validate($arr){
  147. if(! isset($_POST[$this->submit])) return false;
  148. $this->error_mode = $_POST["emode"];
  149. echo "<script defer>document.getElementsByName(\"emode\")[0].selectedIndex =" . ($this->error_mode - 1) . "</script>";
  150. if(is_array($arr)){
  151. $len = count($arr);
  152. for($i = 0; $i < $len; $i++){
  153. $this->is_valid($arr[$i]);
  154. }
  155. }
  156.  
  157. if($this->error_no > 1)
  158. $this->display_error();
  159. }
  160.  
  161. function is_valid($str){
  162. $str = split(",", $str);
  163. if(count($str) < 3) return false;
  164. $name = trim($str[0]);
  165. $message = trim($str[1]);
  166. $data_type = trim($str[2]);
  167. $value = trim($_POST[$name]);
  168.  
  169. switch($data_type){
  170. case "compare" :
  171. break;
  172. case "range" :
  173. break;
  174. case "repeat" :
  175. break;
  176. default :
  177. $method = "is_".$data_type;
  178. if(!$this->$method($value))
  179. $this->add_error($name, $message);
  180. break;
  181. }
  182. }
  183.  
  184. function add_error($name, $message){
  185. $this->error_item .= "," . $name;
  186. $this->error_message .= "," . $this->error_no . ":" . $message;
  187. $this->error_no ++;
  188. }
  189.  
  190. function display_error(){
  191. $this->error_item = ereg_replace("^,+", "", $this->error_item);
  192. $this->error_message = ereg_replace("^,+", "", $this->error_message);
  193.  
  194. switch($this->error_mode){
  195. case 4 :
  196. $info = "以下原因导致提交失败:\t\t\t\t,";
  197. echo "<script>alert(\"".join("\\n", split(",", $info . $this->error_message))."\")</script>";
  198. //print >>>end;
  199. break;
  200. case 5 :
  201. echo "输入有错误:<br /><ul><li>" . ereg_replace( "\b\d+:", "",join("</li><li>", split(",", $this->error_message))) . "</li></ul>";
  202. echo "<br /><a href='javascript:history.back()'>返回</a>";
  203. exit;
  204. break;
  205. default :
  206. echo "<script defer>dispError(\"" . $this->error_item . "\", \"" . $this->error_message . "\", " . $this->error_mode . ", \",\")</script>";
  207. break;
  208. }
  209. }
  210.  
  211. function is_email($str){
  212. return preg_match("/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/", $str);
  213. }
  214.  
  215. function is_url($str){
  216. return preg_match("/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"])*$/", $str);
  217. }
  218.  
  219. function is_qq($str){
  220. return preg_match("/^[1-9]\d{4,8}$/", $str);
  221. }
  222.  
  223. function is_zip($str){
  224. return preg_match("/^[1-9]\d{5}$/", $str);
  225. }
  226.  
  227. function is_idcard($str){
  228. return preg_match("/^\d{15}(\d{2}[A-Za-z0-9])?$/", $str);
  229. }
  230.  
  231. function is_chinese($str){
  232. return ereg("^[".chr(0xa1)."-".chr(0xff)."]+$",$str);
  233. }
  234.  
  235. function is_english($str){
  236. return preg_match("/^[A-Za-z]+$/", $str);
  237. }
  238.  
  239. function is_mobile($str){
  240. return preg_match("/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/", $str);
  241. }
  242.  
  243. function is_phone($str){
  244. return preg_match("/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/", $str);
  245. }
  246.  
  247. function is_safe($str){
  248. return (preg_match("/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/", $str) != 0);
  249. }
  250. }
  251. $v = new Validator();
  252. $v->Validate(array("Name,名字只允许中文,chinese", "Nick, 只允许英文昵称, english", "Homepage, 主页Url格式不正确, url", "Password, 密码不符合安全规则, safe","Email,信箱格式错误,email", "QQ, QQ号码不存在, qq","Card, 身份证号码不正确, idcard","Phone, 电话号码不存在, phone","Mobile, 手机号码不存在, mobile","Zip, 邮政编码不存在, zip"));
  253. ?>

JS代码如下:

  1. <title>表单验证类 Validator v1.05</title>
  2.  <style>
  3.  body,td{font:normal 12px Verdana;color:#333333}
  4.  input,textarea,select,td{font:normal 12px Verdana;color:#333333;border:1px solid #999999;background:#ffffff}
  5.  table{border-collapse:collapse;}
  6.  td{padding:3px}
  7.  input{height:20;}
  8.  textarea{width:80%;height:50px;overflow:auto;}
  9.  form{display:inline}
  10.  </style>
  11.  <table align="center">
  12.   <form name="theForm" id="demo" method="get" onSubmit="return Validator.Validate(this,2)">
  13.   <tr>
  14.    <td>身份证号:</td><td><input name="Card" dataType="IdCard" msg="身份证号错误"></td>
  15.   </tr>
  16.     <tr>
  17.    <td>真实姓名:</td><td><input name="Name" dataType="Chinese" msg="真实姓名只允许中文"></td>
  18.   </tr>
  19.   <tr>
  20.    <td>ID:</td><td><input name="username" dataType="Username" msg="ID名不符合规定"></td>
  21.   </tr>
  22.   <tr>
  23.    <td>英文名:</td><td><input name="Nick" dataType="English" require="false" msg="英文名只允许英文字母"></td>
  24.   </tr>
  25.     <tr>
  26.    <td>主页:</td><td><input name="Homepage" require="false" dataType="Url"   msg="非法的Url"></td>
  27.   </tr>
  28.   <tr>
  29.    <td>密码:</td><td><input name="Password" dataType="SafeString"   msg="密码不符合安全规则" type="password"></td>
  30.   </tr>
  31.   <tr>
  32.    <td>重复:</td><td><input name="Repeat" dataType="Repeat" to="Password" msg="两次输入的密码不一致" type="password"></td>
  33.   </tr>
  34.   <tr>
  35.    <td>信箱:</td><td><input name="Email" dataType="Email" msg="信箱格式不正确"></td>
  36.   </tr>
  37.     <tr>
  38.    <td>信箱:</td><td><input name="Email" dataType="Repeat" to="Email" msg="两次输入的信箱不一致"></td>
  39.   </tr>
  40.   <tr>
  41.    <td>QQ:</td><td><input name="QQ" require="false" dataType="QQ" msg="QQ号码不存在"></td>
  42.   </tr>
  43.     <tr>
  44.    <td>身份证:</td><td><input name="Card" dataType="IdCard" msg="身份证号码不正确"></td>
  45.   </tr>
  46.   <tr>
  47.    <td>年龄:</td><td><input name="Year" dataType="Range" msg="年龄必须在18~28之间" min="18" max="28"></td>
  48.   </tr>
  49.    <tr>
  50.    <td>年龄1:</td><td><input name="Year1" require="false" dataType="Compare" msg="年龄必须在18以上" to="18" operator="GreaterThanEqual"></td>
  51.   </tr>
  52.    <tr>
  53.    <td>电话:</td><td><input name="Phone" require="false" dataType="Phone" msg="电话号码不正确"></td>
  54.   </tr>
  55.    <tr>
  56.    <td>手机:</td><td><input name="Mobile" require="false" dataType="Mobile" msg="手机号码不正确"></td>
  57.   </tr>
  58.      <tr>
  59.    <td>生日:</td><td><input name="Birthday" dataType="Date" format="ymd" msg="生日日期不存在"></td>
  60.   </tr>
  61.    <tr>
  62.    <td>邮政编码:</td><td><input name="Zip" dataType="Custom" regexp="^[1-9]\d{5}$" msg="邮政编码不存在"></td>
  63.   </tr>
  64.   <tr>
  65.    <td>邮政编码:</td><td><input name="Zip1" dataType="Zip" msg="邮政编码不存在"></td>
  66.   </tr>
  67.   <tr>
  68.    <td>操作系统:</td><td><select name="Operation" dataType="Require"  msg="未选择所用操作系统" ><option value="">选择您所用的操作系统</option><option value="Win98">Win98</option><option value="Win2k">Win2k</option><option value="WinXP">WinXP</option></select></td>
  69.   </tr>
  70.   <tr>
  71.    <td>所在省份:</td><td>广东<input name="Province" value="1" type="radio">陕西<input name="Province" value="2" type="radio">浙江<input name="Province" value="3" type="radio">江西<input name="Province" value="4" type="radio" dataType="Group"  msg="必须选定一个省份" ></td>
  72.   </tr>
  73.   <tr>
  74.    <td>爱好:</td><td>运动<input name="Favorite" value="1" type="checkbox">上网<input name="Favorite" value="2" type="checkbox">听音乐<input name="Favorite" value="3" type="checkbox">看书<input name="Favorite" value="4" type="checkbox"" dataType="Group" min="2" max="3"  msg="必须选择2~3种爱好"></td>
  75.   </tr>
  76.    <td>自我介绍:</td><td><textarea name="Description" dataType="Limit" max="10"  msg="自我介绍内容必须在10个字之内">中文是一个字</textarea></td>
  77.   </tr>
  78.      <td>自传:</td><td><textarea name="History" dataType="LimitB" min="3" max="10"  msg="自传内容必须在[3,10]个字节之内">中文是两个字节t</textarea></td>
  79.   </tr>
  80.     <tr>
  81.    <td>相片上传:</td><td><input name="up" dataType="Filter" msg="非法的文件格式" type="file" accept="jpg, gif, png"></td>
  82.   </tr>
  83.   <tr>
  84.    <td colspan="2"><input name="Submit" type="submit" value="确定提交"><input onClick="Validator.Validate(document.getElementById('demo'))" value="检验模式1" type="button"><input onClick="Validator.Validate(document.getElementById('demo'),2)" value="检验模式2" type="button"><input onClick="Validator.Validate(document.getElementById('demo'),3)" value="检验模式3" type="button"></td>
  85.   </tr>
  86.   </form>
  87.  </table>
  88. <script>
  89.   /*************************************************
  90. Validator v1.05
  91. code by 我佛山人
  92. wfsr@msn.com
  93. *************************************************/
  94.  Validator = {
  95. Require : /.+/,
  96. Email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
  97. Phone : /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,
  98. Mobile : /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/,
  99. Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
  100. IdCard : "this.IsIdCard(value)",
  101. Currency : /^\d+(\.\d+)?$/,
  102. Number : /^\d+$/,
  103. Zip : /^[1-9]\d{5}$/,
  104. QQ : /^[1-9]\d{4,8}$/,
  105. Integer : /^[-\+]?\d+$/,
  106. Double : /^[-\+]?\d+(\.\d+)?$/,
  107. English : /^[A-Za-z]+$/,
  108. Chinese :  /^[\u0391-\uFFE5]+$/,
  109. Username : /^[a-z]\w{3,}$/i,
  110. UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
  111. IsSafe : function(str){return !this.UnSafe.test(str);},
  112. SafeString : "this.IsSafe(value)",
  113. Filter : "this.DoFilter(value, getAttribute('accept'))",
  114. Limit : "this.limit(value.length,getAttribute('min'),  getAttribute('max'))",
  115. LimitB : "this.limit(this.LenB(value), getAttribute('min'), getAttribute('max'))",
  116. Date : "this.IsDate(value, getAttribute('min'), getAttribute('format'))",
  117. Repeat : "value == document.getElementsByName(getAttribute('to'))[0].value",
  118. Range : "getAttribute('min') < (value|0) && (value|0) < getAttribute('max')",
  119. Compare : "this.compare(value,getAttribute('operator'),getAttribute('to'))",
  120. Custom : "this.Exec(value, getAttribute('regexp'))",
  121. Group : "this.MustChecked(getAttribute('name'), getAttribute('min'), getAttribute('max'))",
  122. ErrorItem : [document.forms[0]],
  123. ErrorMessage : ["以下原因导致提交失败:\t\t\t\t"],
  124. Validate : function(theForm, mode){
  125. var obj = theForm || event.srcElement;
  126. var count = obj.elements.length;
  127. this.ErrorMessage.length = 1;
  128. this.ErrorItem.length = 1;
  129. this.ErrorItem[0] = obj;
  130. for(var i=0;i<count;i++){
  131. with(obj.elements[i]){
  132. var _dataType = getAttribute("dataType");
  133. if(typeof(_dataType) == "object" || typeof(this[_dataType]) == "undefined")  continue;
  134. this.ClearState(obj.elements[i]);
  135. if(getAttribute("require") == "false" && value == "") continue;
  136. switch(_dataType){
  137. case "IdCard" :
  138. case "Date" :
  139. case "Repeat" :
  140. case "Range" :
  141. case "Compare" :
  142. case "Custom" :
  143. case "Group" :
  144. case "Limit" :
  145. case "LimitB" :
  146. case "SafeString" :
  147. case "Filter" :
  148. if(!eval(this[_dataType])) {
  149. this.AddError(i, getAttribute("msg"));
  150. }
  151. break;
  152. default :
  153. if(!this[_dataType].test(value)){
  154. this.AddError(i, getAttribute("msg"));
  155. }
  156. break;
  157. }
  158. }
  159. }
  160. if(this.ErrorMessage.length > 1){
  161. mode = mode || 1;
  162. var errCount = this.ErrorItem.length;
  163. switch(mode){
  164. case 2 :
  165. for(var i=1;i<errCount;i++)
  166. this.ErrorItem[i].style.color = "red";
  167. case 1 :
  168. alert(this.ErrorMessage.join("\n"));
  169. this.ErrorItem[1].focus();
  170. break;
  171. case 3 :
  172. for(var i=1;i<errCount;i++){
  173. try{
  174. var span = document.createElement("SPAN");
  175. span.id = "__ErrorMessagePanel";
  176. span.style.color = "red";
  177. this.ErrorItem[i].parentNode.appendChild(span);
  178. span.innerHTML = this.ErrorMessage[i].replace(/\d+:/,"*");
  179. }
  180. catch(e){alert(e.description);}
  181. }
  182. this.ErrorItem[1].focus();
  183. break;
  184. default :
  185. alert(this.ErrorMessage.join("\n"));
  186. break;
  187. }
  188. return false;
  189. }
  190. return true;
  191. },
  192. limit : function(len,min, max){
  193. min = min || 0;
  194. max = max || Number.MAX_VALUE;
  195. return min <= len && len <= max;
  196. },
  197. LenB : function(str){
  198. return str.replace(/[^\x00-\xff]/g,"**").length;
  199. },
  200. ClearState : function(elem){
  201. with(elem){
  202. if(style.color == "red")
  203. style.color = "";
  204. var lastNode = parentNode.childNodes[parentNode.childNodes.length-1];
  205. if(lastNode.id == "__ErrorMessagePanel")
  206. parentNode.removeChild(lastNode);
  207. }
  208. },
  209. AddError : function(index, str){
  210. this.ErrorItem[this.ErrorItem.length] = this.ErrorItem[0].elements[index];
  211. this.ErrorMessage[this.ErrorMessage.length] = this.ErrorMessage.length + ":" + str;
  212. },
  213. Exec : function(op, reg){
  214. return new RegExp(reg,"g").test(op);
  215. },
  216. compare : function(op1,operator,op2){
  217. switch (operator) {
  218. case "NotEqual":
  219. return (op1 != op2);
  220. case "GreaterThan":
  221. return (op1 > op2);
  222. case "GreaterThanEqual":
  223. return (op1 >= op2);
  224. case "LessThan":
  225. return (op1 < op2);
  226. case "LessThanEqual":
  227. return (op1 <= op2);
  228. default:
  229. return (op1 == op2);           
  230. }
  231. },
  232. MustChecked : function(name, min, max){
  233. var groups = document.getElementsByName(name);
  234. var hasChecked = 0;
  235. min = min || 1;
  236. max = max || groups.length;
  237. for(var i=groups.length-1;i>=0;i--)
  238. if(groups[i].checked) hasChecked++;
  239. return min <= hasChecked && hasChecked <= max;
  240. },
  241. DoFilter : function(input, filter){
  242. return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, filter.split(/\s*,\s*/).join("|")), "gi").test(input);
  243. },
  244. IsIdCard : function(number){
  245. var date, Ai;
  246. var verify = "10x98765432";
  247. var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  248. var area = ['','','','','','','','','','','','北京','天津','河北','山西','内蒙古','','','','','','辽宁','吉林','黑龙江','','','','','','','','上海','江苏','浙江','安微','福建','江西','山东','','','','河南','湖北','湖南','广东','广西','海南','','','','重庆','四川','贵州','云南','西藏','','','','','','','陕西','甘肃','青海','宁夏','新疆','','','','','','台湾','','','','','','','','','','香港','澳门','','','','','','','','','国外'];
  249. 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);
  250. if(re == null) return false;
  251. if(re[1] >= area.length || area[re[1]] == "") return false;
  252. if(re[2].length == 12){
  253. Ai = number.substr(0, 17);
  254. date = [re[9], re[10], re[11]].join("-");
  255. }
  256. else{
  257. Ai = number.substr(0, 6) + "19" + number.substr(6);
  258. date = ["19" + re[4], re[5], re[6]].join("-");
  259. }
  260. if(!this.IsDate(date, "ymd")) return false;
  261. var sum = 0;
  262. for(var i = 0;i<=16;i++){
  263. sum += Ai.charAt(i) * Wi[i];
  264. }
  265. Ai +=  verify.charAt(sum%11);
  266. return (number.length ==15 || number.length == 18 && number == Ai);
  267. },
  268. IsDate : function(op, formatString){
  269. formatString = formatString || "ymd";
  270. var m, year, month, day;
  271. switch(formatString){
  272. case "ymd" :
  273. m = op.match(new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$"));
  274. if(m == null ) return false;
  275. day = m[6];
  276. month = m[5]*1;
  277. year =  (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
  278. break;
  279. case "dmy" :
  280. m = op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));
  281. if(m == null ) return false;
  282. day = m[1];
  283. month = m[3]*1;
  284. year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
  285. break;
  286. default :
  287. break;
  288. }
  289. if(!parseInt(month)) return false;
  290. month = month==0 ?12:month;
  291. var date = new Date(year, month-1, day);
  292.         return (typeof(date) == "object" && year == date.getFullYear() && month == (date.getMonth()+1) && day == date.getDate());
  293. function GetFullYear(y){return ((y<30 ? "20" : "19") + y)|0;}
  294. }
  295.  }
  296. </script>

1 条评论 »

  1. cxy152376 said,

    十一月 29, 2007 at 9:01 下午

    貌似这个只是验证内容多了些

    要是自己写,偶们也应该能写出来的-_-

RSS feed for comments on this post · TrackBack URL

发表评论