js学习之道:表单验证公共js

[javascript] view plain copy
  1. /** 
  2.     文件名称:CommonUtil.js 
  3.     作者  : Yuce 
  4.     编制时间: 2010-03-24 
  5.     文件内容:一些常用的js公用类。工具类 
  6.     包括方法: 
  7.     g_FormFieldIsNull    判断DBForm的指定字段是否为空 
  8.     g_GetObjXY       获取页面中某个元素的绝对座标 
  9.     g_IsDigit            校验是否全由数字组成 
  10.     g_IsFloat(s,pDecimal) 校验是否是合法的小数 
  11.     g_IsEmail        判断合法的email地址 
  12.     g_IsTeleNumber       校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-” 
  13.     g_IsPostalCode      校验邮政编码 6位数字 
  14.     g_IsMobileNumber    校验手机号码:必须以数字开头,除数字外,可含有“-” 
  15.     g_IsDate        判断日期格式是否合法,符合yyyy-mm-dd 
  16.     g_IsDateTime        校验日期时间是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间 
  17.     g_getStrLen         获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。 
  18.     g_getSubStrInByte           获取子字符串,参数长度为字节长度。 
  19.     g_StringTrim        字符串trim方法,取消到前后的空格 
  20.     g_GetSysDateTime    请求数据库获取数据库的日期和时间 
  21.     g_GetSysDate        请求数据库获取数据库日期 
  22.     g_GetSysTime        请求数据库获取数据库时间 
  23.   g_CheckInputNum         控制只能输入数字 
  24.   g_IDCardNumber      判断是否是身份证号码 
  25.   g_FormatDate(aDate,format) 格式化日期时间方法PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss 
  26.    
  27.   g_BeforePasteNum()  粘贴时控制只能贴入数字和回车 需要绑定onbeforePaste事件 
  28.   g_BeforePasteEnglish() 粘贴时控制只能贴入数字和字母,需要绑定onbeforePaste事件 
  29.    
  30.   g_CompareDate       判断日期大小 
  31.   g_MonthsBetween     计算月份差(忽略天,先将时间trunc到月,然后做比较) 
  32. **/  
  33.   
  34.   
  35. /** 
  36.  判断DBForm的指定字段是否为空,如果为空返回true,并alert警告。否则返回false 
  37.  pFormRowSet -- DBFormRowSet对象 
  38.  pFieldNames -- 校验的字段名称串,每个字符以"," 分割 
  39. */  
  40.   
  41. function g_FormFieldIsNull(pFormRowSet,pFieldNames)  
  42. {  
  43.     var flag = false;  
  44.     if(pFormRowSet == null || pFieldNames==null || pFieldNames=="")  
  45.     {  
  46.         alert(g_I18NMessage("appframe_core","commutil_param_null"));  
  47.         return flag;  
  48.     }  
  49.     var fieldArray = pFieldNames.split(",");  
  50.     if(fieldArray!=null && fieldArray.length>0){  
  51.       for (var i=0;i<fieldArray.length ;i++ )  
  52.       {  
  53.     var fieldValue = pFormRowSet.getValue(fieldArray[i]);  
  54.     if(fieldValue!=null && g_StringTrim(fieldValue)==""){  
  55.   
  56.           var fieldText = pFormRowSet.getTitle(fieldArray[i]);  
  57.           alert(fieldText+g_I18NMessage("appframe_core","commutil_cannot_null"));  
  58.           flag = true;  
  59.           break;  
  60.         }  
  61.       }  
  62.   
  63.     }  
  64.     return flag;  
  65.   
  66. }  
  67.   
  68.   
  69.   
  70.  /********************************************************************************* 
  71. * FUNCTION: g_GetObjXY 获取页面中某个元素的绝对座标 
  72. * PARAMETER: obj,dhtml 对象 
  73. * RETURNS: array,array['x']=xpos,array['y']=ypos 
  74. *********************************************************************************/  
  75. function g_GetObjXY(Obj)  
  76.  {  
  77.      for(var sumTop=0,sumLeft=0;Obj!=document.body;sumTop+=Obj.offsetTop,sumLeft+=Obj.offsetLeft,Obj=Obj.offsetParent);  
  78.     return {left:sumLeft,top:sumTop};  
  79.   
  80.  }  
  81.   
  82.   
  83.   
  84.  /********************************************************************************* 
  85. * FUNCTION: g_IsEmail 判断合法的email地址 
  86. * PARAMETER: String (Email Address) 
  87. * RETURNS: TRUE if the String is a valid Email address 
  88. * FALSE if the passed string is not a valid Email Address 
  89. * EMAIL FORMAT: AnyName@EmailServer e.g; webmaster@hotmail.com 
  90. * @ sign can appear only once in the email address. 
  91. *********************************************************************************/  
  92. function g_IsEmail (theStr) {  
  93. if(theStr==null || theStr=='')return true;  
  94. var atIndex = theStr.indexOf('@');  
  95. var dotIndex = theStr.indexOf('.', atIndex);  
  96. var flag = true;  
  97. theSub = theStr.substring(0, dotIndex+1)  
  98.   
  99. if ((atIndex < 1)||(atIndex != theStr.lastIndexOf('@'))||(dotIndex < atIndex + 2)||(theStr.length <= theSub.length))  
  100. return(false); }  
  101. else { return(true); }  
  102. }  
  103.   
  104.   
  105.   
  106. /********************************************************************************* 
  107. * FUNCTION: g_IsDigit 校验是否全由数字组成 
  108. * PARAMETER: 字符串s 
  109. * RETURNS: true/false 
  110. *********************************************************************************/  
  111.   
  112. function g_IsDigit(s)  
  113. {  
  114.  if(s==nullreturn false;  
  115.  if(s=='')return true;  
  116.  s=''+s;  
  117.  if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);  
  118.   
  119. var patrn=/^[0-9]*$/;  
  120. if (!patrn.exec(s)) return false;  
  121. return true  
  122. }  
  123.   
  124. /********************************************************************************* 
  125. * FUNCTION: g_IsFloat 校验是否是小数 
  126. * PARAMETER: 字符串s.pDecimal精度(保留多少位小数 值为0或者-1时不限制精度) 
  127. * RETURNS: true/false 
  128. *********************************************************************************/  
  129. function g_IsFloat(s,pDecimal)  
  130. {  
  131.  if(s==nullreturn false;  
  132.  s=''+s;  
  133.  if(s=='')return true;  
  134.    
  135.  if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);  
  136.   
  137.  var dec = -1;  
  138.  if(parseInt(pDecimal)!=NaN)  
  139.    dec = pDecimal;  
  140.  var reg = "^[0-9]+(\\.[0-9]{1,"+dec+"})?$";  
  141.  if(dec==0 || dec==-1)  
  142.  {  
  143.    reg = "^[0-9]+(\\.[0-9]{1,10000})?$";  
  144.  }  
  145.  var re = new RegExp(reg,"g");  
  146.  if(!s.match(re)) return false;  
  147.  else return true;  
  148.   
  149. }  
  150.   
  151.   
  152. /********************************************************************************* 
  153. * FUNCTION: g_IsTeleNumber 校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-” 
  154. * PARAMETER: 字符串s 
  155. * RETURNS: true/false 
  156. *********************************************************************************/  
  157.   
  158. function g_IsTeleNumber_bak(s)  
  159. {  
  160. if(s==null || s=='')return true;  
  161. if(s.length>20)return false;  
  162. var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;  
  163. if (!patrn.exec(s)) return false  
  164. return true  
  165. }  
  166. function g_IsTeleNumber(s)  
  167. {  
  168. if(s==null || s=='')return true;  
  169. if(s.length>20 || s.length<4)return false;  
  170.   
  171. var re = new RegExp(/^[\d'('')'' '\*\-]*$/);  
  172.   
  173. if(re.exec(s))return true;  
  174. else return false;  
  175. }  
  176. /********************************************************************************* 
  177. * FUNCTION: g_IsMobileNumber 校验手机号码:必须以数字开头,除数字外,可含有“-” 
  178. * PARAMETER: 字符串s 
  179. * RETURNS: true/false 
  180. *********************************************************************************/  
  181.   
  182. function g_IsMobileNumber_bak(s)  
  183. {  
  184. var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;  
  185. if (!patrn.exec(s)) return false  
  186. return true  
  187. }  
  188.   
  189. //新的手机号码验证,以1打头,11位数字  
  190. function g_IsMobileNumber(s)  
  191. {  
  192. if(s==null || s=='')return true;  
  193. if( s.length!=11 || ( s.substring(0,2)!='13' && s.substring(0,2)!='15'))return false;  
  194. if(!g_IsDigit(s))return false;  
  195. return true  
  196. }  
  197. /********************************************************************************* 
  198. * FUNCTION: g_IsPostalCode 校验邮政编码 6位数字 
  199. * PARAMETER: 字符串s 
  200. * RETURNS: true/false 
  201. *********************************************************************************/  
  202.   
  203. //  
  204. function g_IsPostalCode(s)  
  205. {  
  206. if(s==null || s=='')return true;  
  207. var patrn=/^[0-9]{6}$/;  
  208. if (!patrn.exec(s)) return false  
  209. return true  
  210. }  
  211.   
  212.   
  213.   
  214.   
  215.   
  216. /********************************************************************************* 
  217. * FUNCTION: g_IsDate 校验日期是否合法yyyy-mm-dd这种格式的日期 
  218. * PARAMETER: 字符串s 
  219. * RETURNS: true/false 
  220. *********************************************************************************/  
  221.   
  222. function g_IsDate(str)  
  223. {  
  224.     if(str=='')return true;  
  225.    if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";  
  226.    var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}$";  
  227.    var patrn = new RegExp(regExpStr);  
  228.   
  229.    if(!patrn.exec(str)) return false;  
  230.    var dateArray  = str.split(DATE_SEPARATOR);  
  231.    var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2]);  
  232.    var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]));  
  233.    if (!issame)  
  234.        {  
  235.      return false;  
  236.        }  
  237.    return true;  
  238. }  
  239.   
  240. /********************************************************************************* 
  241. * FUNCTION: g_IsDateTime 校验日期是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间 
  242. * PARAMETER: 字符串s 
  243. * RETURNS: true/false 
  244. *********************************************************************************/  
  245. function g_IsDateTime(str)  
  246. {  
  247.     if(str=='')return true;  
  248.    if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";  
  249.    var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}\\s\\d{2}:\\d{1,2}:\\d{1,2}$";  
  250.    var patrn = new RegExp(regExpStr);  
  251.   
  252.    if(!patrn.exec(str)) return false;  
  253.    var dateTimeArray = str.split(" ");  
  254.    if(dateTimeArray==null || dateTimeArray.length!=2) return false;  
  255.    var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  256.    var timeArray = dateTimeArray[1].split(":");  
  257.    var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2],timeArray[0],timeArray[1],timeArray[2]);  
  258.    var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]) && (d.getHours() == timeArray[0]) && (d.getMinutes()== timeArray[1]) && (d.getSeconds()== timeArray[2])  );  
  259.    if (!issame)  
  260.        {  
  261.      return false;  
  262.        }  
  263.    return true;  
  264. }  
  265.   
  266. /********************************************************************************* 
  267. * FUNCTION: 获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。 
  268. * PARAMETER: 字符串s 
  269. * RETURNS: int 
  270. *********************************************************************************/  
  271. function g_GetStrLen(str){  
  272.   str = str.toString(10);  
  273.   return str.replace(/[^\x00-\xff]/g,"aa").length;  
  274. }  
  275.   
  276. /********************************************************************************* 
  277. * FUNCTION: 获取子字符串,参数长度为字节长度 
  278. * PARAMETER: str字符串,length获取长度,已字节为单位,如双字节,按照2处理,子串取ground 
  279. * RETURNS: int 
  280. *********************************************************************************/  
  281. function g_getSubStrInByte(str,lenth){  
  282.   str = str.toString(10);  
  283.   var tmpstr= str.replace(/[^\x00-\xff]/g,"\x0b\x0c");  
  284.   
  285.     tmpstr =tmpstr.substring(0,lenth);  
  286.     tmpstr = tmpstr.replace(/\x0b/g,'');  
  287.     return str.substring(0,tmpstr.length);  
  288. }  
  289.   
  290. /********************************************************************************* 
  291. * FUNCTION: 字符串trim方法,取消到前后的空格 
  292. * PARAMETER: 字符串s 
  293. * RETURNS: string字符串 
  294. *********************************************************************************/  
  295. function g_StringTrim(str){  
  296.   str = str.toString(10);  
  297.   return str.replace(/(^\s*)|(\s*$)/g, "");  
  298. }  
  299.   
  300.   
  301.   
  302. /********************************************************************************* 
  303. * FUNCTION: 请求数据库获取数据库的日期和时间 
  304. * PARAMETER: null 
  305. * RETURNS: string字符串 
  306. *********************************************************************************/  
  307. function g_GetSysDateTime()  
  308. {  
  309.      var _gNode = null;  
  310.      var xml= new ActiveXObject("Msxml.DOMDocument");  
  311.      xml.async = false;  
  312.      var url=  _gModuleName+ "/business/com.ai.appframe2.web.DefaultAction?action=getSysDateTime";  
  313.      var b = xml.load(url);  
  314.      if(!b){  
  315.         alert(g_I18NMessage("appframe_core","commutil_gettime_err"));  
  316.         return null;  
  317.       }  
  318.   
  319.       var xmlNode = xml.documentElement;  
  320.       var ud = createUserDataClass(xmlNode,true);  
  321.       return ud.getValueByName("DateTime");  
  322. }  
  323.   
  324.   
  325.   
  326. /********************************************************************************* 
  327. * FUNCTION: 请求数据库获取数据库日期 
  328. * PARAMETER: null 
  329. * RETURNS: string字符串 
  330. *********************************************************************************/  
  331.   
  332. function g_GetSysDate()  
  333. {  
  334.    var dateTime = g_GetSysDateTime();  
  335.    var date = null;  
  336.    if(dateTime!=null && dateTime.indexOf(' ')!=null)  
  337.     {  
  338.        date = dateTime.substring(0,dateTime.indexOf(' '));  
  339.     }  
  340.   return date;  
  341. }  
  342.   
  343. /********************************************************************************* 
  344. * FUNCTION: 请求数据库获取数据库的时间 
  345. * PARAMETER: null 
  346. * RETURNS: string字符串 
  347. *********************************************************************************/  
  348. function g_GetSysTime()  
  349. {  
  350.    var dateTime = g_GetSysDateTime();  
  351.    var time = null;  
  352.    if(dateTime!=null && dateTime.indexOf(' ')!=null)  
  353.     {  
  354.        time = dateTime.substring(dateTime.indexOf(' ')+1,dateTime.length);  
  355.     }  
  356.   return time;  
  357. }  
  358.   
  359.   
  360. /********************************************************************************* 
  361. * FUNCTION: 控制只能输入数字和回车 
  362. * PARAMETER: null 
  363. * RETURNS: null 
  364. *********************************************************************************/  
  365. function g_CheckInputNum(obj){  
  366.   var keyCode = event.keyCode;  
  367.   
  368.   if(keyCode==8)return;  
  369.   if(keyCode==46)return;  
  370.   if(keyCode==35)return;  
  371.   if(keyCode==36)return;  
  372.   if(keyCode==37)return;  
  373.   if(keyCode==39)return;  
  374.   if(event.keyCode==13)return;  
  375.   
  376.   //支持ctrl + a、v、x、c  
  377.   if(event.ctrlKey && (keyCode==65 || keyCode==67  
  378.     ||keyCode==86 || keyCode==88)){  
  379.     if(keyCode==86){  
  380.       var str = window.clipboardData.getData('text');  
  381.       if(str!=null){  
  382.         str = str.replace(/[^\d\n]/g,'');  
  383.         str = str.replace(/[\n]+/g,'\n');  
  384.         window.clipboardData.setData('Text',str);  
  385.       }  
  386.     }  
  387.     return;  
  388.   }  
  389.   
  390.   if(48>event.keyCode || (event.keyCode > 57 && event.keyCode < 96)  
  391.      || event.keyCode >105 ){  
  392.     event.returnValue=false;  
  393.   }  
  394.   //对微软输入法的特殊限制  
  395.   if(keyCode ==229 && obj !=null){  
  396.     obj.disabled = true;  
  397.     obj.disabled = false;  
  398.     obj.focus();  
  399.     obj.value = obj.value.replace(/[^\d]/g,'');  
  400.   }  
  401. }  
  402.   
  403. /********************************************************************************* 
  404. * FUNCTION: 控制只能输入数字或字母等 
  405. * 允许的字母如下:"0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " 
  406. * PARAMETER: null 
  407. * RETURNS: null 
  408. *********************************************************************************/  
  409.   
  410. function g_CheckInputEnglish(obj){  
  411.   var keyCode = event.keyCode;  
  412.   
  413.   if(keyCode==8)return;  
  414.   if(keyCode==46)return;  
  415.   if(keyCode==35)return;  
  416.   if(keyCode==36)return;  
  417.   if(keyCode==37)return;  
  418.   if(keyCode==39)return;  
  419.   if(event.keyCode==13)return;  
  420.   
  421.   //支持ctrl + a、v、x、c  
  422.   if(event.ctrlKey && (keyCode==65 || keyCode==67  
  423.     ||keyCode==86 || keyCode==88)){  
  424.     //  
  425.     if(keyCode==86){  
  426.       var str = window.clipboardData.getData('text');  
  427.       if(str!=null){  
  428.         str = str.replace(/[\W]/g,'');  
  429.         window.clipboardData.setData('Text',str);  
  430.       }  
  431.     }  
  432.     return;  
  433.   }  
  434.   
  435.   var checkOK = "0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";  
  436.   
  437.   var str = String.fromCharCode(keyCode);  
  438.   
  439.   if(checkOK.indexOf(str)<0 ){  
  440.     event.returnValue=false;  
  441.   }  
  442.   //对微软输入法的特殊限制  
  443.   if(keyCode ==229 && obj !=null){  
  444.     obj.disabled = true;  
  445.     obj.disabled = false;  
  446.     obj.focus();  
  447.     obj.value = obj.value.replace(/[\W]/g,'')  
  448.   }  
  449. }  
  450.   
  451.   
  452. //判断是否是身份证号码  
  453. function g_IDCardNumber(value){  
  454.   if(value=='' || value==null)return true;  
  455.   var length = value.length;  
  456.   
  457.   if(length ==15){  
  458.     if(!g_IsDigit(value) || value.substring(0,1)=='-'){  
  459.       return false;  
  460.     }  
  461.     return true;  
  462.   }else if(length ==18){  
  463.     //前17位必须是数字  
  464.     for (i= 0; i < 17;  i++){  
  465.       code = value.charCodeAt(i);  
  466.       if(code<48 || code>57)return false;  
  467.     }  
  468.     //18位身份证号码的最后一位可以是数字或英文字母  
  469.     code = value.charCodeAt(17);  
  470.     if(code>=48 && code<=57 || code>=65 && code<=90 || code>=97 && code<=122){  
  471.       return true;  
  472.     }  
  473.   }  
  474.   //位数不为15或者18则返回  
  475.   return false;  
  476. }  
  477.   
  478. //判断日期大小,输入两个日期字符串,返回两个日期的大小  
  479. // 0一样大 ,1 第一日期大 ,-1 第二个日期大,-2错误  
  480. function g_CompareDate(date_str1 ,date_str2){  
  481.   if(date_str1 ==null)date_str1='';  
  482.   if(date_str2==null ) date_str2='';  
  483.   
  484.   if(date_str1 ==date_str2)return 0;  
  485.   
  486.   if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)  
  487.       || !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){  
  488.     alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));  
  489.     return -2;  
  490.   }  
  491.   
  492.   if(date_str1 =='' && date_str2 !=''return -1;  
  493.   if(date_str2 =='' && date_str1 !='')return 1;  
  494.   
  495.   var hour =0;  
  496.   var min =0;  
  497.   var sec =0;  
  498.   
  499.   var dateTimeArray = date_str1.split(" ");  
  500.   var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  501.   if(dateTimeArray.length>1){  
  502.     var timeArray = dateTimeArray[1].split(":");  
  503.     hour = timeArray[0];  
  504.     min = timeArray[1]  
  505.     sec = timeArray[2]  
  506.   }  
  507.   var d1= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);  
  508.   
  509.   hour =0;  
  510.   min =0;  
  511.   sec =0;  
  512.   
  513.   dateTimeArray = date_str2.split(" ");  
  514.   dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  515.   if(dateTimeArray.length>1){  
  516.     var timeArray = dateTimeArray[1].split(":");  
  517.     hour = timeArray[0];  
  518.     min = timeArray[1]  
  519.     sec = timeArray[2]  
  520.   }  
  521.   var d2= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);  
  522.   
  523.   if (d1.getTime()==d2.getTime()) return 0;  
  524.   if(d1.getTime()>d2.getTime())return 1;  
  525.   else return -1;  
  526. }  
  527. /** 
  528. 判断月份差,输入两个日期字符串,返回两个月份差 
  529. 如果输入的是非法值,抛出异常 
  530. (year1-year2)*12+(month1-month2) 
  531. add by yangbb 
  532. */  
  533. function g_MonthsBetween(date_str1 ,date_str2){  
  534.     if(date_str1 ==null){  
  535.         date_str1='';  
  536.     }     
  537.     if(date_str2==null ){  
  538.         date_str2='';  
  539.     }     
  540.   
  541.     if(date_str1 ==date_str2){  
  542.         return 0;  
  543.     }  
  544.       
  545.     if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)|| !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){  
  546.         alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));  
  547.         //抛出异常  
  548.         throw new Error(g_I18NMessage("appframe_core","commutil_not_date"));  
  549.     }  
  550.   
  551.     //解析时间字符串  
  552.     var year1 =0;  
  553.     var month1 =0;  
  554.     var day1 =0;  
  555.     var dateTimeArray = date_str1.split(" ");  
  556.     var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  557.     year1=dateArray[0];  
  558.     month1=dateArray[1];  
  559.     day1=dateArray[2];  
  560.       
  561.     var year2 =0;  
  562.     var month2 =0;  
  563.     var day2 =0;  
  564.     dateTimeArray = date_str2.split(" ");  
  565.     dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  566.     year2=dateArray[0];  
  567.     month2=dateArray[1];  
  568.     day2=dateArray[2];  
  569.       
  570.     return (year1-year2)*12+(month1-month2);  
  571. }  
  572.   
  573. //校验密码是否合法 ,8位非空字母 ,包含数字和字母  
  574. function checkPSWFormatValid(psw){  
  575.   if(psw==null || psw.length<8){  
  576.     alert(g_I18NMessage("appframe_core","commutil_pwd_len"));  
  577.     return false;  
  578.   }  
  579.   if(psw.indexOf(' ')>-1 || psw.indexOf('&')>-1){  
  580.     alert(g_I18NMessage("appframe_core","commutil_pwd_black"));  
  581.     return false;  
  582.   }  
  583.   
  584.   var bNumber = false;//判断密码是否含有数字  
  585.   var bAlphe = false//判断是否含有英文字母  
  586.   
  587.   for (i = 0;  i < psw.length;  i++){  
  588.       //如果含有英文字母和数字,则返回true  
  589.       if(bNumber && bAlphe ){  
  590.         return true;  
  591.       }  
  592.       code = psw.charCodeAt(i);  
  593.       //判断是否包含数字  
  594.       if(!bNumber){  
  595.         if(code>=48 && code<=57){  
  596.            bNumber = true;  
  597.            continue;  
  598.         }  
  599.       }  
  600.       //判断是否包含英文字母  
  601.       if(!bAlphe){  
  602.         if(code>=65 && code<=90 || code>=97 && code<=122){  
  603.            bAlphe = true;  
  604.         }  
  605.       }  
  606.    }  
  607.    if(bNumber && bAlphe ){  
  608.         return true;  
  609.    }  
  610.    alert(g_I18NMessage("appframe_core","commutil_pwd_all"));  
  611.    return false;  
  612. }  
  613.   
  614.   
  615. /********************************************************************************* 
  616. * FUNCTION: 格式化日期时间方法 
  617. * PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss 
  618. * RETURNS: 格式后的日期时间字符串 
  619. * AUTHOR:ZLH 
  620. *********************************************************************************/  
  621. function g_FormatDate(aDate,format)  
  622.   {  
  623.     var o = {  
  624.     "M+" : aDate.getMonth()+1, //month  
  625.     "d+" : aDate.getDate(),    //day  
  626.     "h+" : aDate.getHours(),   //hour  
  627.     "m+" : aDate.getMinutes(), //minute  
  628.     "s+" : aDate.getSeconds(), //second  
  629.     "q+" : Math.floor((aDate.getMonth()+3)/3),  //quarter  
  630.     "S" : aDate.getMilliseconds() //millisecond  
  631.     }  
  632.     if(/(y+)/.test(format)) format=format.replace(RegExp.$1,  
  633.     (aDate.getFullYear()+"").substr(4 - RegExp.$1.length));  
  634.     for(var k in o)if(new RegExp("("+ k +")").test(format))  
  635.     format = format.replace(RegExp.$1,  
  636.     RegExp.$1.length==1 ? o[k] :  
  637.     ("00"+ o[k]).substr((""+ o[k]).length));  
  638.     return format;  
  639.   }  
  640.   
  641. /********************************************************************************* 
  642. * FUNCTION: 粘贴时控制只能贴入数字和回车 
  643. * PARAMETER: null 
  644. * RETURNS: null 
  645. *********************************************************************************/  
  646. function g_BeforePasteNum(){  
  647.   var str = window.clipboardData.getData('text');  
  648.   if(str!=null){  
  649.     str = str.replace(/[^\d\n]/g,'');  
  650.     str = str.replace(/[\n]+/g,'\n');  
  651.     str = str.replace(/(^\s*)|(\s*$)/g, "");  
  652.     window.clipboardData.setData('Text',str);  
  653.   }  
  654. }  
  655.   
  656. /********************************************************************************* 
  657. * FUNCTION: 粘贴时控制只能贴入数字和字母 
  658. * PARAMETER: null 
  659. * RETURNS: null 
  660. *********************************************************************************/  
  661. function g_BeforePasteEnglish(){  
  662.   var str = window.clipboardData.getData('text');  
  663.   if(str!=null){  
  664.     str = str.replace(/[\W]/g,'');  
  665.     window.clipboardData.setData('Text',str);  
  666.   }  

[javascript] view plain copy
  1. /** 
  2.     文件名称:CommonUtil.js 
  3.     作者  : Yuce 
  4.     编制时间: 2010-03-24 
  5.     文件内容:一些常用的js公用类。工具类 
  6.     包括方法: 
  7.     g_FormFieldIsNull    判断DBForm的指定字段是否为空 
  8.     g_GetObjXY       获取页面中某个元素的绝对座标 
  9.     g_IsDigit            校验是否全由数字组成 
  10.     g_IsFloat(s,pDecimal) 校验是否是合法的小数 
  11.     g_IsEmail        判断合法的email地址 
  12.     g_IsTeleNumber       校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-” 
  13.     g_IsPostalCode      校验邮政编码 6位数字 
  14.     g_IsMobileNumber    校验手机号码:必须以数字开头,除数字外,可含有“-” 
  15.     g_IsDate        判断日期格式是否合法,符合yyyy-mm-dd 
  16.     g_IsDateTime        校验日期时间是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间 
  17.     g_getStrLen         获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。 
  18.     g_getSubStrInByte           获取子字符串,参数长度为字节长度。 
  19.     g_StringTrim        字符串trim方法,取消到前后的空格 
  20.     g_GetSysDateTime    请求数据库获取数据库的日期和时间 
  21.     g_GetSysDate        请求数据库获取数据库日期 
  22.     g_GetSysTime        请求数据库获取数据库时间 
  23.   g_CheckInputNum         控制只能输入数字 
  24.   g_IDCardNumber      判断是否是身份证号码 
  25.   g_FormatDate(aDate,format) 格式化日期时间方法PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss 
  26.    
  27.   g_BeforePasteNum()  粘贴时控制只能贴入数字和回车 需要绑定onbeforePaste事件 
  28.   g_BeforePasteEnglish() 粘贴时控制只能贴入数字和字母,需要绑定onbeforePaste事件 
  29.    
  30.   g_CompareDate       判断日期大小 
  31.   g_MonthsBetween     计算月份差(忽略天,先将时间trunc到月,然后做比较) 
  32. **/  
  33.   
  34.   
  35. /** 
  36.  判断DBForm的指定字段是否为空,如果为空返回true,并alert警告。否则返回false 
  37.  pFormRowSet -- DBFormRowSet对象 
  38.  pFieldNames -- 校验的字段名称串,每个字符以"," 分割 
  39. */  
  40.   
  41. function g_FormFieldIsNull(pFormRowSet,pFieldNames)  
  42. {  
  43.     var flag = false;  
  44.     if(pFormRowSet == null || pFieldNames==null || pFieldNames=="")  
  45.     {  
  46.         alert(g_I18NMessage("appframe_core","commutil_param_null"));  
  47.         return flag;  
  48.     }  
  49.     var fieldArray = pFieldNames.split(",");  
  50.     if(fieldArray!=null && fieldArray.length>0){  
  51.       for (var i=0;i<fieldArray.length ;i++ )  
  52.       {  
  53.     var fieldValue = pFormRowSet.getValue(fieldArray[i]);  
  54.     if(fieldValue!=null && g_StringTrim(fieldValue)==""){  
  55.   
  56.           var fieldText = pFormRowSet.getTitle(fieldArray[i]);  
  57.           alert(fieldText+g_I18NMessage("appframe_core","commutil_cannot_null"));  
  58.           flag = true;  
  59.           break;  
  60.         }  
  61.       }  
  62.   
  63.     }  
  64.     return flag;  
  65.   
  66. }  
  67.   
  68.   
  69.   
  70.  /********************************************************************************* 
  71. * FUNCTION: g_GetObjXY 获取页面中某个元素的绝对座标 
  72. * PARAMETER: obj,dhtml 对象 
  73. * RETURNS: array,array['x']=xpos,array['y']=ypos 
  74. *********************************************************************************/  
  75. function g_GetObjXY(Obj)  
  76.  {  
  77.      for(var sumTop=0,sumLeft=0;Obj!=document.body;sumTop+=Obj.offsetTop,sumLeft+=Obj.offsetLeft,Obj=Obj.offsetParent);  
  78.     return {left:sumLeft,top:sumTop};  
  79.   
  80.  }  
  81.   
  82.   
  83.   
  84.  /********************************************************************************* 
  85. * FUNCTION: g_IsEmail 判断合法的email地址 
  86. * PARAMETER: String (Email Address) 
  87. * RETURNS: TRUE if the String is a valid Email address 
  88. * FALSE if the passed string is not a valid Email Address 
  89. * EMAIL FORMAT: AnyName@EmailServer e.g; webmaster@hotmail.com 
  90. * @ sign can appear only once in the email address. 
  91. *********************************************************************************/  
  92. function g_IsEmail (theStr) {  
  93. if(theStr==null || theStr=='')return true;  
  94. var atIndex = theStr.indexOf('@');  
  95. var dotIndex = theStr.indexOf('.', atIndex);  
  96. var flag = true;  
  97. theSub = theStr.substring(0, dotIndex+1)  
  98.   
  99. if ((atIndex < 1)||(atIndex != theStr.lastIndexOf('@'))||(dotIndex < atIndex + 2)||(theStr.length <= theSub.length))  
  100. return(false); }  
  101. else { return(true); }  
  102. }  
  103.   
  104.   
  105.   
  106. /********************************************************************************* 
  107. * FUNCTION: g_IsDigit 校验是否全由数字组成 
  108. * PARAMETER: 字符串s 
  109. * RETURNS: true/false 
  110. *********************************************************************************/  
  111.   
  112. function g_IsDigit(s)  
  113. {  
  114.  if(s==nullreturn false;  
  115.  if(s=='')return true;  
  116.  s=''+s;  
  117.  if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);  
  118.   
  119. var patrn=/^[0-9]*$/;  
  120. if (!patrn.exec(s)) return false;  
  121. return true  
  122. }  
  123.   
  124. /********************************************************************************* 
  125. * FUNCTION: g_IsFloat 校验是否是小数 
  126. * PARAMETER: 字符串s.pDecimal精度(保留多少位小数 值为0或者-1时不限制精度) 
  127. * RETURNS: true/false 
  128. *********************************************************************************/  
  129. function g_IsFloat(s,pDecimal)  
  130. {  
  131.  if(s==nullreturn false;  
  132.  s=''+s;  
  133.  if(s=='')return true;  
  134.    
  135.  if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);  
  136.   
  137.  var dec = -1;  
  138.  if(parseInt(pDecimal)!=NaN)  
  139.    dec = pDecimal;  
  140.  var reg = "^[0-9]+(\\.[0-9]{1,"+dec+"})?$";  
  141.  if(dec==0 || dec==-1)  
  142.  {  
  143.    reg = "^[0-9]+(\\.[0-9]{1,10000})?$";  
  144.  }  
  145.  var re = new RegExp(reg,"g");  
  146.  if(!s.match(re)) return false;  
  147.  else return true;  
  148.   
  149. }  
  150.   
  151.   
  152. /********************************************************************************* 
  153. * FUNCTION: g_IsTeleNumber 校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-” 
  154. * PARAMETER: 字符串s 
  155. * RETURNS: true/false 
  156. *********************************************************************************/  
  157.   
  158. function g_IsTeleNumber_bak(s)  
  159. {  
  160. if(s==null || s=='')return true;  
  161. if(s.length>20)return false;  
  162. var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;  
  163. if (!patrn.exec(s)) return false  
  164. return true  
  165. }  
  166. function g_IsTeleNumber(s)  
  167. {  
  168. if(s==null || s=='')return true;  
  169. if(s.length>20 || s.length<4)return false;  
  170.   
  171. var re = new RegExp(/^[\d'('')'' '\*\-]*$/);  
  172.   
  173. if(re.exec(s))return true;  
  174. else return false;  
  175. }  
  176. /********************************************************************************* 
  177. * FUNCTION: g_IsMobileNumber 校验手机号码:必须以数字开头,除数字外,可含有“-” 
  178. * PARAMETER: 字符串s 
  179. * RETURNS: true/false 
  180. *********************************************************************************/  
  181.   
  182. function g_IsMobileNumber_bak(s)  
  183. {  
  184. var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;  
  185. if (!patrn.exec(s)) return false  
  186. return true  
  187. }  
  188.   
  189. //新的手机号码验证,以1打头,11位数字  
  190. function g_IsMobileNumber(s)  
  191. {  
  192. if(s==null || s=='')return true;  
  193. if( s.length!=11 || ( s.substring(0,2)!='13' && s.substring(0,2)!='15'))return false;  
  194. if(!g_IsDigit(s))return false;  
  195. return true  
  196. }  
  197. /********************************************************************************* 
  198. * FUNCTION: g_IsPostalCode 校验邮政编码 6位数字 
  199. * PARAMETER: 字符串s 
  200. * RETURNS: true/false 
  201. *********************************************************************************/  
  202.   
  203. //  
  204. function g_IsPostalCode(s)  
  205. {  
  206. if(s==null || s=='')return true;  
  207. var patrn=/^[0-9]{6}$/;  
  208. if (!patrn.exec(s)) return false  
  209. return true  
  210. }  
  211.   
  212.   
  213.   
  214.   
  215.   
  216. /********************************************************************************* 
  217. * FUNCTION: g_IsDate 校验日期是否合法yyyy-mm-dd这种格式的日期 
  218. * PARAMETER: 字符串s 
  219. * RETURNS: true/false 
  220. *********************************************************************************/  
  221.   
  222. function g_IsDate(str)  
  223. {  
  224.     if(str=='')return true;  
  225.    if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";  
  226.    var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}$";  
  227.    var patrn = new RegExp(regExpStr);  
  228.   
  229.    if(!patrn.exec(str)) return false;  
  230.    var dateArray  = str.split(DATE_SEPARATOR);  
  231.    var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2]);  
  232.    var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]));  
  233.    if (!issame)  
  234.        {  
  235.      return false;  
  236.        }  
  237.    return true;  
  238. }  
  239.   
  240. /********************************************************************************* 
  241. * FUNCTION: g_IsDateTime 校验日期是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间 
  242. * PARAMETER: 字符串s 
  243. * RETURNS: true/false 
  244. *********************************************************************************/  
  245. function g_IsDateTime(str)  
  246. {  
  247.     if(str=='')return true;  
  248.    if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";  
  249.    var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}\\s\\d{2}:\\d{1,2}:\\d{1,2}$";  
  250.    var patrn = new RegExp(regExpStr);  
  251.   
  252.    if(!patrn.exec(str)) return false;  
  253.    var dateTimeArray = str.split(" ");  
  254.    if(dateTimeArray==null || dateTimeArray.length!=2) return false;  
  255.    var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  256.    var timeArray = dateTimeArray[1].split(":");  
  257.    var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2],timeArray[0],timeArray[1],timeArray[2]);  
  258.    var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]) && (d.getHours() == timeArray[0]) && (d.getMinutes()== timeArray[1]) && (d.getSeconds()== timeArray[2])  );  
  259.    if (!issame)  
  260.        {  
  261.      return false;  
  262.        }  
  263.    return true;  
  264. }  
  265.   
  266. /********************************************************************************* 
  267. * FUNCTION: 获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。 
  268. * PARAMETER: 字符串s 
  269. * RETURNS: int 
  270. *********************************************************************************/  
  271. function g_GetStrLen(str){  
  272.   str = str.toString(10);  
  273.   return str.replace(/[^\x00-\xff]/g,"aa").length;  
  274. }  
  275.   
  276. /********************************************************************************* 
  277. * FUNCTION: 获取子字符串,参数长度为字节长度 
  278. * PARAMETER: str字符串,length获取长度,已字节为单位,如双字节,按照2处理,子串取ground 
  279. * RETURNS: int 
  280. *********************************************************************************/  
  281. function g_getSubStrInByte(str,lenth){  
  282.   str = str.toString(10);  
  283.   var tmpstr= str.replace(/[^\x00-\xff]/g,"\x0b\x0c");  
  284.   
  285.     tmpstr =tmpstr.substring(0,lenth);  
  286.     tmpstr = tmpstr.replace(/\x0b/g,'');  
  287.     return str.substring(0,tmpstr.length);  
  288. }  
  289.   
  290. /********************************************************************************* 
  291. * FUNCTION: 字符串trim方法,取消到前后的空格 
  292. * PARAMETER: 字符串s 
  293. * RETURNS: string字符串 
  294. *********************************************************************************/  
  295. function g_StringTrim(str){  
  296.   str = str.toString(10);  
  297.   return str.replace(/(^\s*)|(\s*$)/g, "");  
  298. }  
  299.   
  300.   
  301.   
  302. /********************************************************************************* 
  303. * FUNCTION: 请求数据库获取数据库的日期和时间 
  304. * PARAMETER: null 
  305. * RETURNS: string字符串 
  306. *********************************************************************************/  
  307. function g_GetSysDateTime()  
  308. {  
  309.      var _gNode = null;  
  310.      var xml= new ActiveXObject("Msxml.DOMDocument");  
  311.      xml.async = false;  
  312.      var url=  _gModuleName+ "/business/com.ai.appframe2.web.DefaultAction?action=getSysDateTime";  
  313.      var b = xml.load(url);  
  314.      if(!b){  
  315.         alert(g_I18NMessage("appframe_core","commutil_gettime_err"));  
  316.         return null;  
  317.       }  
  318.   
  319.       var xmlNode = xml.documentElement;  
  320.       var ud = createUserDataClass(xmlNode,true);  
  321.       return ud.getValueByName("DateTime");  
  322. }  
  323.   
  324.   
  325.   
  326. /********************************************************************************* 
  327. * FUNCTION: 请求数据库获取数据库日期 
  328. * PARAMETER: null 
  329. * RETURNS: string字符串 
  330. *********************************************************************************/  
  331.   
  332. function g_GetSysDate()  
  333. {  
  334.    var dateTime = g_GetSysDateTime();  
  335.    var date = null;  
  336.    if(dateTime!=null && dateTime.indexOf(' ')!=null)  
  337.     {  
  338.        date = dateTime.substring(0,dateTime.indexOf(' '));  
  339.     }  
  340.   return date;  
  341. }  
  342.   
  343. /********************************************************************************* 
  344. * FUNCTION: 请求数据库获取数据库的时间 
  345. * PARAMETER: null 
  346. * RETURNS: string字符串 
  347. *********************************************************************************/  
  348. function g_GetSysTime()  
  349. {  
  350.    var dateTime = g_GetSysDateTime();  
  351.    var time = null;  
  352.    if(dateTime!=null && dateTime.indexOf(' ')!=null)  
  353.     {  
  354.        time = dateTime.substring(dateTime.indexOf(' ')+1,dateTime.length);  
  355.     }  
  356.   return time;  
  357. }  
  358.   
  359.   
  360. /********************************************************************************* 
  361. * FUNCTION: 控制只能输入数字和回车 
  362. * PARAMETER: null 
  363. * RETURNS: null 
  364. *********************************************************************************/  
  365. function g_CheckInputNum(obj){  
  366.   var keyCode = event.keyCode;  
  367.   
  368.   if(keyCode==8)return;  
  369.   if(keyCode==46)return;  
  370.   if(keyCode==35)return;  
  371.   if(keyCode==36)return;  
  372.   if(keyCode==37)return;  
  373.   if(keyCode==39)return;  
  374.   if(event.keyCode==13)return;  
  375.   
  376.   //支持ctrl + a、v、x、c  
  377.   if(event.ctrlKey && (keyCode==65 || keyCode==67  
  378.     ||keyCode==86 || keyCode==88)){  
  379.     if(keyCode==86){  
  380.       var str = window.clipboardData.getData('text');  
  381.       if(str!=null){  
  382.         str = str.replace(/[^\d\n]/g,'');  
  383.         str = str.replace(/[\n]+/g,'\n');  
  384.         window.clipboardData.setData('Text',str);  
  385.       }  
  386.     }  
  387.     return;  
  388.   }  
  389.   
  390.   if(48>event.keyCode || (event.keyCode > 57 && event.keyCode < 96)  
  391.      || event.keyCode >105 ){  
  392.     event.returnValue=false;  
  393.   }  
  394.   //对微软输入法的特殊限制  
  395.   if(keyCode ==229 && obj !=null){  
  396.     obj.disabled = true;  
  397.     obj.disabled = false;  
  398.     obj.focus();  
  399.     obj.value = obj.value.replace(/[^\d]/g,'');  
  400.   }  
  401. }  
  402.   
  403. /********************************************************************************* 
  404. * FUNCTION: 控制只能输入数字或字母等 
  405. * 允许的字母如下:"0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " 
  406. * PARAMETER: null 
  407. * RETURNS: null 
  408. *********************************************************************************/  
  409.   
  410. function g_CheckInputEnglish(obj){  
  411.   var keyCode = event.keyCode;  
  412.   
  413.   if(keyCode==8)return;  
  414.   if(keyCode==46)return;  
  415.   if(keyCode==35)return;  
  416.   if(keyCode==36)return;  
  417.   if(keyCode==37)return;  
  418.   if(keyCode==39)return;  
  419.   if(event.keyCode==13)return;  
  420.   
  421.   //支持ctrl + a、v、x、c  
  422.   if(event.ctrlKey && (keyCode==65 || keyCode==67  
  423.     ||keyCode==86 || keyCode==88)){  
  424.     //  
  425.     if(keyCode==86){  
  426.       var str = window.clipboardData.getData('text');  
  427.       if(str!=null){  
  428.         str = str.replace(/[\W]/g,'');  
  429.         window.clipboardData.setData('Text',str);  
  430.       }  
  431.     }  
  432.     return;  
  433.   }  
  434.   
  435.   var checkOK = "0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";  
  436.   
  437.   var str = String.fromCharCode(keyCode);  
  438.   
  439.   if(checkOK.indexOf(str)<0 ){  
  440.     event.returnValue=false;  
  441.   }  
  442.   //对微软输入法的特殊限制  
  443.   if(keyCode ==229 && obj !=null){  
  444.     obj.disabled = true;  
  445.     obj.disabled = false;  
  446.     obj.focus();  
  447.     obj.value = obj.value.replace(/[\W]/g,'')  
  448.   }  
  449. }  
  450.   
  451.   
  452. //判断是否是身份证号码  
  453. function g_IDCardNumber(value){  
  454.   if(value=='' || value==null)return true;  
  455.   var length = value.length;  
  456.   
  457.   if(length ==15){  
  458.     if(!g_IsDigit(value) || value.substring(0,1)=='-'){  
  459.       return false;  
  460.     }  
  461.     return true;  
  462.   }else if(length ==18){  
  463.     //前17位必须是数字  
  464.     for (i= 0; i < 17;  i++){  
  465.       code = value.charCodeAt(i);  
  466.       if(code<48 || code>57)return false;  
  467.     }  
  468.     //18位身份证号码的最后一位可以是数字或英文字母  
  469.     code = value.charCodeAt(17);  
  470.     if(code>=48 && code<=57 || code>=65 && code<=90 || code>=97 && code<=122){  
  471.       return true;  
  472.     }  
  473.   }  
  474.   //位数不为15或者18则返回  
  475.   return false;  
  476. }  
  477.   
  478. //判断日期大小,输入两个日期字符串,返回两个日期的大小  
  479. // 0一样大 ,1 第一日期大 ,-1 第二个日期大,-2错误  
  480. function g_CompareDate(date_str1 ,date_str2){  
  481.   if(date_str1 ==null)date_str1='';  
  482.   if(date_str2==null ) date_str2='';  
  483.   
  484.   if(date_str1 ==date_str2)return 0;  
  485.   
  486.   if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)  
  487.       || !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){  
  488.     alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));  
  489.     return -2;  
  490.   }  
  491.   
  492.   if(date_str1 =='' && date_str2 !=''return -1;  
  493.   if(date_str2 =='' && date_str1 !='')return 1;  
  494.   
  495.   var hour =0;  
  496.   var min =0;  
  497.   var sec =0;  
  498.   
  499.   var dateTimeArray = date_str1.split(" ");  
  500.   var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  501.   if(dateTimeArray.length>1){  
  502.     var timeArray = dateTimeArray[1].split(":");  
  503.     hour = timeArray[0];  
  504.     min = timeArray[1]  
  505.     sec = timeArray[2]  
  506.   }  
  507.   var d1= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);  
  508.   
  509.   hour =0;  
  510.   min =0;  
  511.   sec =0;  
  512.   
  513.   dateTimeArray = date_str2.split(" ");  
  514.   dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  515.   if(dateTimeArray.length>1){  
  516.     var timeArray = dateTimeArray[1].split(":");  
  517.     hour = timeArray[0];  
  518.     min = timeArray[1]  
  519.     sec = timeArray[2]  
  520.   }  
  521.   var d2= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);  
  522.   
  523.   if (d1.getTime()==d2.getTime()) return 0;  
  524.   if(d1.getTime()>d2.getTime())return 1;  
  525.   else return -1;  
  526. }  
  527. /** 
  528. 判断月份差,输入两个日期字符串,返回两个月份差 
  529. 如果输入的是非法值,抛出异常 
  530. (year1-year2)*12+(month1-month2) 
  531. add by yangbb 
  532. */  
  533. function g_MonthsBetween(date_str1 ,date_str2){  
  534.     if(date_str1 ==null){  
  535.         date_str1='';  
  536.     }     
  537.     if(date_str2==null ){  
  538.         date_str2='';  
  539.     }     
  540.   
  541.     if(date_str1 ==date_str2){  
  542.         return 0;  
  543.     }  
  544.       
  545.     if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)|| !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){  
  546.         alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));  
  547.         //抛出异常  
  548.         throw new Error(g_I18NMessage("appframe_core","commutil_not_date"));  
  549.     }  
  550.   
  551.     //解析时间字符串  
  552.     var year1 =0;  
  553.     var month1 =0;  
  554.     var day1 =0;  
  555.     var dateTimeArray = date_str1.split(" ");  
  556.     var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  557.     year1=dateArray[0];  
  558.     month1=dateArray[1];  
  559.     day1=dateArray[2];  
  560.       
  561.     var year2 =0;  
  562.     var month2 =0;  
  563.     var day2 =0;  
  564.     dateTimeArray = date_str2.split(" ");  
  565.     dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
  566.     year2=dateArray[0];  
  567.     month2=dateArray[1];  
  568.     day2=dateArray[2];  
  569.       
  570.     return (year1-year2)*12+(month1-month2);  
  571. }  
  572.   
  573. //校验密码是否合法 ,8位非空字母 ,包含数字和字母  
  574. function checkPSWFormatValid(psw){  
  575.   if(psw==null || psw.length<8){  
  576.     alert(g_I18NMessage("appframe_core","commutil_pwd_len"));  
  577.     return false;  
  578.   }  
  579.   if(psw.indexOf(' ')>-1 || psw.indexOf('&')>-1){  
  580.     alert(g_I18NMessage("appframe_core","commutil_pwd_black"));  
  581.     return false;  
  582.   }  
  583.   
  584.   var bNumber = false;//判断密码是否含有数字  
  585.   var bAlphe = false//判断是否含有英文字母  
  586.   
  587.   for (i = 0;  i < psw.length;  i++){  
  588.       //如果含有英文字母和数字,则返回true  
  589.       if(bNumber && bAlphe ){  
  590.         return true;  
  591.       }  
  592.       code = psw.charCodeAt(i);  
  593.       //判断是否包含数字  
  594.       if(!bNumber){  
  595.         if(code>=48 && code<=57){  
  596.            bNumber = true;  
  597.            continue;  
  598.         }  
  599.       }  
  600.       //判断是否包含英文字母  
  601.       if(!bAlphe){  
  602.         if(code>=65 && code<=90 || code>=97 && code<=122){  
  603.            bAlphe = true;  
  604.         }  
  605.       }  
  606.    }  
  607.    if(bNumber && bAlphe ){  
  608.         return true;  
  609.    }  
  610.    alert(g_I18NMessage("appframe_core","commutil_pwd_all"));  
  611.    return false;  
  612. }  
  613.   
  614.   
  615. /********************************************************************************* 
  616. * FUNCTION: 格式化日期时间方法 
  617. * PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss 
  618. * RETURNS: 格式后的日期时间字符串 
  619. * AUTHOR:ZLH 
  620. *********************************************************************************/  
  621. function g_FormatDate(aDate,format)  
  622.   {  
  623.     var o = {  
  624.     "M+" : aDate.getMonth()+1, //month  
  625.     "d+" : aDate.getDate(),    //day  
  626.     "h+" : aDate.getHours(),   //hour  
  627.     "m+" : aDate.getMinutes(), //minute  
  628.     "s+" : aDate.getSeconds(), //second  
  629.     "q+" : Math.floor((aDate.getMonth()+3)/3),  //quarter  
  630.     "S" : aDate.getMilliseconds() //millisecond  
  631.     }  
  632.     if(/(y+)/.test(format)) format=format.replace(RegExp.$1,  
  633.     (aDate.getFullYear()+"").substr(4 - RegExp.$1.length));  
  634.     for(var k in o)if(new RegExp("("+ k +")").test(format))  
  635.     format = format.replace(RegExp.$1,  
  636.     RegExp.$1.length==1 ? o[k] :  
  637.     ("00"+ o[k]).substr((""+ o[k]).length));  
  638.     return format;  
  639.   }  
  640.   
  641. /********************************************************************************* 
  642. * FUNCTION: 粘贴时控制只能贴入数字和回车 
  643. * PARAMETER: null 
  644. * RETURNS: null 
  645. *********************************************************************************/  
  646. function g_BeforePasteNum(){  
  647.   var str = window.clipboardData.getData('text');  
  648.   if(str!=null){  
  649.     str = str.replace(/[^\d\n]/g,'');  
  650.     str = str.replace(/[\n]+/g,'\n');  
  651.     str = str.replace(/(^\s*)|(\s*$)/g, "");  
  652.     window.clipboardData.setData('Text',str);  
  653.   }  
  654. }  
  655.   
  656. /********************************************************************************* 
  657. * FUNCTION: 粘贴时控制只能贴入数字和字母 
  658. * PARAMETER: null 
  659. * RETURNS: null 
  660. *********************************************************************************/  
  661. function g_BeforePasteEnglish(){  
  662.   var str = window.clipboardData.getData('text');  
  663.   if(str!=null){  
  664.     str = str.replace(/[\W]/g,'');  
  665.     window.clipboardData.setData('Text',str);  
  666.   }  

  667. [javascript] view plain copy
    1. /** 
    2.     文件名称:CommonUtil.js 
    3.     作者  : Yuce 
    4.     编制时间: 2010-03-24 
    5.     文件内容:一些常用的js公用类。工具类 
    6.     包括方法: 
    7.     g_FormFieldIsNull    判断DBForm的指定字段是否为空 
    8.     g_GetObjXY       获取页面中某个元素的绝对座标 
    9.     g_IsDigit            校验是否全由数字组成 
    10.     g_IsFloat(s,pDecimal) 校验是否是合法的小数 
    11.     g_IsEmail        判断合法的email地址 
    12.     g_IsTeleNumber       校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-” 
    13.     g_IsPostalCode      校验邮政编码 6位数字 
    14.     g_IsMobileNumber    校验手机号码:必须以数字开头,除数字外,可含有“-” 
    15.     g_IsDate        判断日期格式是否合法,符合yyyy-mm-dd 
    16.     g_IsDateTime        校验日期时间是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间 
    17.     g_getStrLen         获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。 
    18.     g_getSubStrInByte           获取子字符串,参数长度为字节长度。 
    19.     g_StringTrim        字符串trim方法,取消到前后的空格 
    20.     g_GetSysDateTime    请求数据库获取数据库的日期和时间 
    21.     g_GetSysDate        请求数据库获取数据库日期 
    22.     g_GetSysTime        请求数据库获取数据库时间 
    23.   g_CheckInputNum         控制只能输入数字 
    24.   g_IDCardNumber      判断是否是身份证号码 
    25.   g_FormatDate(aDate,format) 格式化日期时间方法PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss 
    26.    
    27.   g_BeforePasteNum()  粘贴时控制只能贴入数字和回车 需要绑定onbeforePaste事件 
    28.   g_BeforePasteEnglish() 粘贴时控制只能贴入数字和字母,需要绑定onbeforePaste事件 
    29.    
    30.   g_CompareDate       判断日期大小 
    31.   g_MonthsBetween     计算月份差(忽略天,先将时间trunc到月,然后做比较) 
    32. **/  
    33.   
    34.   
    35. /** 
    36.  判断DBForm的指定字段是否为空,如果为空返回true,并alert警告。否则返回false 
    37.  pFormRowSet -- DBFormRowSet对象 
    38.  pFieldNames -- 校验的字段名称串,每个字符以"," 分割 
    39. */  
    40.   
    41. function g_FormFieldIsNull(pFormRowSet,pFieldNames)  
    42. {  
    43.     var flag = false;  
    44.     if(pFormRowSet == null || pFieldNames==null || pFieldNames=="")  
    45.     {  
    46.         alert(g_I18NMessage("appframe_core","commutil_param_null"));  
    47.         return flag;  
    48.     }  
    49.     var fieldArray = pFieldNames.split(",");  
    50.     if(fieldArray!=null && fieldArray.length>0){  
    51.       for (var i=0;i<fieldArray.length ;i++ )  
    52.       {  
    53.     var fieldValue = pFormRowSet.getValue(fieldArray[i]);  
    54.     if(fieldValue!=null && g_StringTrim(fieldValue)==""){  
    55.   
    56.           var fieldText = pFormRowSet.getTitle(fieldArray[i]);  
    57.           alert(fieldText+g_I18NMessage("appframe_core","commutil_cannot_null"));  
    58.           flag = true;  
    59.           break;  
    60.         }  
    61.       }  
    62.   
    63.     }  
    64.     return flag;  
    65.   
    66. }  
    67.   
    68.   
    69.   
    70.  /********************************************************************************* 
    71. * FUNCTION: g_GetObjXY 获取页面中某个元素的绝对座标 
    72. * PARAMETER: obj,dhtml 对象 
    73. * RETURNS: array,array['x']=xpos,array['y']=ypos 
    74. *********************************************************************************/  
    75. function g_GetObjXY(Obj)  
    76.  {  
    77.      for(var sumTop=0,sumLeft=0;Obj!=document.body;sumTop+=Obj.offsetTop,sumLeft+=Obj.offsetLeft,Obj=Obj.offsetParent);  
    78.     return {left:sumLeft,top:sumTop};  
    79.   
    80.  }  
    81.   
    82.   
    83.   
    84.  /********************************************************************************* 
    85. * FUNCTION: g_IsEmail 判断合法的email地址 
    86. * PARAMETER: String (Email Address) 
    87. * RETURNS: TRUE if the String is a valid Email address 
    88. * FALSE if the passed string is not a valid Email Address 
    89. * EMAIL FORMAT: AnyName@EmailServer e.g; webmaster@hotmail.com 
    90. * @ sign can appear only once in the email address. 
    91. *********************************************************************************/  
    92. function g_IsEmail (theStr) {  
    93. if(theStr==null || theStr=='')return true;  
    94. var atIndex = theStr.indexOf('@');  
    95. var dotIndex = theStr.indexOf('.', atIndex);  
    96. var flag = true;  
    97. theSub = theStr.substring(0, dotIndex+1)  
    98.   
    99. if ((atIndex < 1)||(atIndex != theStr.lastIndexOf('@'))||(dotIndex < atIndex + 2)||(theStr.length <= theSub.length))  
    100. return(false); }  
    101. else { return(true); }  
    102. }  
    103.   
    104.   
    105.   
    106. /********************************************************************************* 
    107. * FUNCTION: g_IsDigit 校验是否全由数字组成 
    108. * PARAMETER: 字符串s 
    109. * RETURNS: true/false 
    110. *********************************************************************************/  
    111.   
    112. function g_IsDigit(s)  
    113. {  
    114.  if(s==nullreturn false;  
    115.  if(s=='')return true;  
    116.  s=''+s;  
    117.  if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);  
    118.   
    119. var patrn=/^[0-9]*$/;  
    120. if (!patrn.exec(s)) return false;  
    121. return true  
    122. }  
    123.   
    124. /********************************************************************************* 
    125. * FUNCTION: g_IsFloat 校验是否是小数 
    126. * PARAMETER: 字符串s.pDecimal精度(保留多少位小数 值为0或者-1时不限制精度) 
    127. * RETURNS: true/false 
    128. *********************************************************************************/  
    129. function g_IsFloat(s,pDecimal)  
    130. {  
    131.  if(s==nullreturn false;  
    132.  s=''+s;  
    133.  if(s=='')return true;  
    134.    
    135.  if(s.substring(0,1)=='-' && s.length>1)s=s.substring(1,s.length);  
    136.   
    137.  var dec = -1;  
    138.  if(parseInt(pDecimal)!=NaN)  
    139.    dec = pDecimal;  
    140.  var reg = "^[0-9]+(\\.[0-9]{1,"+dec+"})?$";  
    141.  if(dec==0 || dec==-1)  
    142.  {  
    143.    reg = "^[0-9]+(\\.[0-9]{1,10000})?$";  
    144.  }  
    145.  var re = new RegExp(reg,"g");  
    146.  if(!s.match(re)) return false;  
    147.  else return true;  
    148.   
    149. }  
    150.   
    151.   
    152. /********************************************************************************* 
    153. * FUNCTION: g_IsTeleNumber 校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-” 
    154. * PARAMETER: 字符串s 
    155. * RETURNS: true/false 
    156. *********************************************************************************/  
    157.   
    158. function g_IsTeleNumber_bak(s)  
    159. {  
    160. if(s==null || s=='')return true;  
    161. if(s.length>20)return false;  
    162. var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;  
    163. if (!patrn.exec(s)) return false  
    164. return true  
    165. }  
    166. function g_IsTeleNumber(s)  
    167. {  
    168. if(s==null || s=='')return true;  
    169. if(s.length>20 || s.length<4)return false;  
    170.   
    171. var re = new RegExp(/^[\d'('')'' '\*\-]*$/);  
    172.   
    173. if(re.exec(s))return true;  
    174. else return false;  
    175. }  
    176. /********************************************************************************* 
    177. * FUNCTION: g_IsMobileNumber 校验手机号码:必须以数字开头,除数字外,可含有“-” 
    178. * PARAMETER: 字符串s 
    179. * RETURNS: true/false 
    180. *********************************************************************************/  
    181.   
    182. function g_IsMobileNumber_bak(s)  
    183. {  
    184. var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;  
    185. if (!patrn.exec(s)) return false  
    186. return true  
    187. }  
    188.   
    189. //新的手机号码验证,以1打头,11位数字  
    190. function g_IsMobileNumber(s)  
    191. {  
    192. if(s==null || s=='')return true;  
    193. if( s.length!=11 || ( s.substring(0,2)!='13' && s.substring(0,2)!='15'))return false;  
    194. if(!g_IsDigit(s))return false;  
    195. return true  
    196. }  
    197. /********************************************************************************* 
    198. * FUNCTION: g_IsPostalCode 校验邮政编码 6位数字 
    199. * PARAMETER: 字符串s 
    200. * RETURNS: true/false 
    201. *********************************************************************************/  
    202.   
    203. //  
    204. function g_IsPostalCode(s)  
    205. {  
    206. if(s==null || s=='')return true;  
    207. var patrn=/^[0-9]{6}$/;  
    208. if (!patrn.exec(s)) return false  
    209. return true  
    210. }  
    211.   
    212.   
    213.   
    214.   
    215.   
    216. /********************************************************************************* 
    217. * FUNCTION: g_IsDate 校验日期是否合法yyyy-mm-dd这种格式的日期 
    218. * PARAMETER: 字符串s 
    219. * RETURNS: true/false 
    220. *********************************************************************************/  
    221.   
    222. function g_IsDate(str)  
    223. {  
    224.     if(str=='')return true;  
    225.    if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";  
    226.    var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}$";  
    227.    var patrn = new RegExp(regExpStr);  
    228.   
    229.    if(!patrn.exec(str)) return false;  
    230.    var dateArray  = str.split(DATE_SEPARATOR);  
    231.    var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2]);  
    232.    var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]));  
    233.    if (!issame)  
    234.        {  
    235.      return false;  
    236.        }  
    237.    return true;  
    238. }  
    239.   
    240. /********************************************************************************* 
    241. * FUNCTION: g_IsDateTime 校验日期是否合法yyyy-mm-dd H24:MI:SS这种格式的日期+时间 
    242. * PARAMETER: 字符串s 
    243. * RETURNS: true/false 
    244. *********************************************************************************/  
    245. function g_IsDateTime(str)  
    246. {  
    247.     if(str=='')return true;  
    248.    if(DATE_SEPARATOR==null) DATE_SEPARATOR ="-";  
    249.    var regExpStr = "^\\d{4}" + DATE_SEPARATOR + "\\d{1,2}" + DATE_SEPARATOR + "\\d{1,2}\\s\\d{2}:\\d{1,2}:\\d{1,2}$";  
    250.    var patrn = new RegExp(regExpStr);  
    251.   
    252.    if(!patrn.exec(str)) return false;  
    253.    var dateTimeArray = str.split(" ");  
    254.    if(dateTimeArray==null || dateTimeArray.length!=2) return false;  
    255.    var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
    256.    var timeArray = dateTimeArray[1].split(":");  
    257.    var d= new Date(dateArray[0],dateArray[1]-1,dateArray[2],timeArray[0],timeArray[1],timeArray[2]);  
    258.    var issame =(d && (d.getFullYear()==dateArray[0])&& (d.getMonth()+1==dateArray[1]) &&(d.getDate()==dateArray[2]) && (d.getHours() == timeArray[0]) && (d.getMinutes()== timeArray[1]) && (d.getSeconds()== timeArray[2])  );  
    259.    if (!issame)  
    260.        {  
    261.      return false;  
    262.        }  
    263.    return true;  
    264. }  
    265.   
    266. /********************************************************************************* 
    267. * FUNCTION: 获取字符串的长度,如果字符串中包括中文等双字节代码,则其长度算为2。 
    268. * PARAMETER: 字符串s 
    269. * RETURNS: int 
    270. *********************************************************************************/  
    271. function g_GetStrLen(str){  
    272.   str = str.toString(10);  
    273.   return str.replace(/[^\x00-\xff]/g,"aa").length;  
    274. }  
    275.   
    276. /********************************************************************************* 
    277. * FUNCTION: 获取子字符串,参数长度为字节长度 
    278. * PARAMETER: str字符串,length获取长度,已字节为单位,如双字节,按照2处理,子串取ground 
    279. * RETURNS: int 
    280. *********************************************************************************/  
    281. function g_getSubStrInByte(str,lenth){  
    282.   str = str.toString(10);  
    283.   var tmpstr= str.replace(/[^\x00-\xff]/g,"\x0b\x0c");  
    284.   
    285.     tmpstr =tmpstr.substring(0,lenth);  
    286.     tmpstr = tmpstr.replace(/\x0b/g,'');  
    287.     return str.substring(0,tmpstr.length);  
    288. }  
    289.   
    290. /********************************************************************************* 
    291. * FUNCTION: 字符串trim方法,取消到前后的空格 
    292. * PARAMETER: 字符串s 
    293. * RETURNS: string字符串 
    294. *********************************************************************************/  
    295. function g_StringTrim(str){  
    296.   str = str.toString(10);  
    297.   return str.replace(/(^\s*)|(\s*$)/g, "");  
    298. }  
    299.   
    300.   
    301.   
    302. /********************************************************************************* 
    303. * FUNCTION: 请求数据库获取数据库的日期和时间 
    304. * PARAMETER: null 
    305. * RETURNS: string字符串 
    306. *********************************************************************************/  
    307. function g_GetSysDateTime()  
    308. {  
    309.      var _gNode = null;  
    310.      var xml= new ActiveXObject("Msxml.DOMDocument");  
    311.      xml.async = false;  
    312.      var url=  _gModuleName+ "/business/com.ai.appframe2.web.DefaultAction?action=getSysDateTime";  
    313.      var b = xml.load(url);  
    314.      if(!b){  
    315.         alert(g_I18NMessage("appframe_core","commutil_gettime_err"));  
    316.         return null;  
    317.       }  
    318.   
    319.       var xmlNode = xml.documentElement;  
    320.       var ud = createUserDataClass(xmlNode,true);  
    321.       return ud.getValueByName("DateTime");  
    322. }  
    323.   
    324.   
    325.   
    326. /********************************************************************************* 
    327. * FUNCTION: 请求数据库获取数据库日期 
    328. * PARAMETER: null 
    329. * RETURNS: string字符串 
    330. *********************************************************************************/  
    331.   
    332. function g_GetSysDate()  
    333. {  
    334.    var dateTime = g_GetSysDateTime();  
    335.    var date = null;  
    336.    if(dateTime!=null && dateTime.indexOf(' ')!=null)  
    337.     {  
    338.        date = dateTime.substring(0,dateTime.indexOf(' '));  
    339.     }  
    340.   return date;  
    341. }  
    342.   
    343. /********************************************************************************* 
    344. * FUNCTION: 请求数据库获取数据库的时间 
    345. * PARAMETER: null 
    346. * RETURNS: string字符串 
    347. *********************************************************************************/  
    348. function g_GetSysTime()  
    349. {  
    350.    var dateTime = g_GetSysDateTime();  
    351.    var time = null;  
    352.    if(dateTime!=null && dateTime.indexOf(' ')!=null)  
    353.     {  
    354.        time = dateTime.substring(dateTime.indexOf(' ')+1,dateTime.length);  
    355.     }  
    356.   return time;  
    357. }  
    358.   
    359.   
    360. /********************************************************************************* 
    361. * FUNCTION: 控制只能输入数字和回车 
    362. * PARAMETER: null 
    363. * RETURNS: null 
    364. *********************************************************************************/  
    365. function g_CheckInputNum(obj){  
    366.   var keyCode = event.keyCode;  
    367.   
    368.   if(keyCode==8)return;  
    369.   if(keyCode==46)return;  
    370.   if(keyCode==35)return;  
    371.   if(keyCode==36)return;  
    372.   if(keyCode==37)return;  
    373.   if(keyCode==39)return;  
    374.   if(event.keyCode==13)return;  
    375.   
    376.   //支持ctrl + a、v、x、c  
    377.   if(event.ctrlKey && (keyCode==65 || keyCode==67  
    378.     ||keyCode==86 || keyCode==88)){  
    379.     if(keyCode==86){  
    380.       var str = window.clipboardData.getData('text');  
    381.       if(str!=null){  
    382.         str = str.replace(/[^\d\n]/g,'');  
    383.         str = str.replace(/[\n]+/g,'\n');  
    384.         window.clipboardData.setData('Text',str);  
    385.       }  
    386.     }  
    387.     return;  
    388.   }  
    389.   
    390.   if(48>event.keyCode || (event.keyCode > 57 && event.keyCode < 96)  
    391.      || event.keyCode >105 ){  
    392.     event.returnValue=false;  
    393.   }  
    394.   //对微软输入法的特殊限制  
    395.   if(keyCode ==229 && obj !=null){  
    396.     obj.disabled = true;  
    397.     obj.disabled = false;  
    398.     obj.focus();  
    399.     obj.value = obj.value.replace(/[^\d]/g,'');  
    400.   }  
    401. }  
    402.   
    403. /********************************************************************************* 
    404. * FUNCTION: 控制只能输入数字或字母等 
    405. * 允许的字母如下:"0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " 
    406. * PARAMETER: null 
    407. * RETURNS: null 
    408. *********************************************************************************/  
    409.   
    410. function g_CheckInputEnglish(obj){  
    411.   var keyCode = event.keyCode;  
    412.   
    413.   if(keyCode==8)return;  
    414.   if(keyCode==46)return;  
    415.   if(keyCode==35)return;  
    416.   if(keyCode==36)return;  
    417.   if(keyCode==37)return;  
    418.   if(keyCode==39)return;  
    419.   if(event.keyCode==13)return;  
    420.   
    421.   //支持ctrl + a、v、x、c  
    422.   if(event.ctrlKey && (keyCode==65 || keyCode==67  
    423.     ||keyCode==86 || keyCode==88)){  
    424.     //  
    425.     if(keyCode==86){  
    426.       var str = window.clipboardData.getData('text');  
    427.       if(str!=null){  
    428.         str = str.replace(/[\W]/g,'');  
    429.         window.clipboardData.setData('Text',str);  
    430.       }  
    431.     }  
    432.     return;  
    433.   }  
    434.   
    435.   var checkOK = "0123456789-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";  
    436.   
    437.   var str = String.fromCharCode(keyCode);  
    438.   
    439.   if(checkOK.indexOf(str)<0 ){  
    440.     event.returnValue=false;  
    441.   }  
    442.   //对微软输入法的特殊限制  
    443.   if(keyCode ==229 && obj !=null){  
    444.     obj.disabled = true;  
    445.     obj.disabled = false;  
    446.     obj.focus();  
    447.     obj.value = obj.value.replace(/[\W]/g,'')  
    448.   }  
    449. }  
    450.   
    451.   
    452. //判断是否是身份证号码  
    453. function g_IDCardNumber(value){  
    454.   if(value=='' || value==null)return true;  
    455.   var length = value.length;  
    456.   
    457.   if(length ==15){  
    458.     if(!g_IsDigit(value) || value.substring(0,1)=='-'){  
    459.       return false;  
    460.     }  
    461.     return true;  
    462.   }else if(length ==18){  
    463.     //前17位必须是数字  
    464.     for (i= 0; i < 17;  i++){  
    465.       code = value.charCodeAt(i);  
    466.       if(code<48 || code>57)return false;  
    467.     }  
    468.     //18位身份证号码的最后一位可以是数字或英文字母  
    469.     code = value.charCodeAt(17);  
    470.     if(code>=48 && code<=57 || code>=65 && code<=90 || code>=97 && code<=122){  
    471.       return true;  
    472.     }  
    473.   }  
    474.   //位数不为15或者18则返回  
    475.   return false;  
    476. }  
    477.   
    478. //判断日期大小,输入两个日期字符串,返回两个日期的大小  
    479. // 0一样大 ,1 第一日期大 ,-1 第二个日期大,-2错误  
    480. function g_CompareDate(date_str1 ,date_str2){  
    481.   if(date_str1 ==null)date_str1='';  
    482.   if(date_str2==null ) date_str2='';  
    483.   
    484.   if(date_str1 ==date_str2)return 0;  
    485.   
    486.   if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)  
    487.       || !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){  
    488.     alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));  
    489.     return -2;  
    490.   }  
    491.   
    492.   if(date_str1 =='' && date_str2 !=''return -1;  
    493.   if(date_str2 =='' && date_str1 !='')return 1;  
    494.   
    495.   var hour =0;  
    496.   var min =0;  
    497.   var sec =0;  
    498.   
    499.   var dateTimeArray = date_str1.split(" ");  
    500.   var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
    501.   if(dateTimeArray.length>1){  
    502.     var timeArray = dateTimeArray[1].split(":");  
    503.     hour = timeArray[0];  
    504.     min = timeArray[1]  
    505.     sec = timeArray[2]  
    506.   }  
    507.   var d1= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);  
    508.   
    509.   hour =0;  
    510.   min =0;  
    511.   sec =0;  
    512.   
    513.   dateTimeArray = date_str2.split(" ");  
    514.   dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
    515.   if(dateTimeArray.length>1){  
    516.     var timeArray = dateTimeArray[1].split(":");  
    517.     hour = timeArray[0];  
    518.     min = timeArray[1]  
    519.     sec = timeArray[2]  
    520.   }  
    521.   var d2= new Date(dateArray[0],dateArray[1]-1,dateArray[2],hour ,min ,sec);  
    522.   
    523.   if (d1.getTime()==d2.getTime()) return 0;  
    524.   if(d1.getTime()>d2.getTime())return 1;  
    525.   else return -1;  
    526. }  
    527. /** 
    528. 判断月份差,输入两个日期字符串,返回两个月份差 
    529. 如果输入的是非法值,抛出异常 
    530. (year1-year2)*12+(month1-month2) 
    531. add by yangbb 
    532. */  
    533. function g_MonthsBetween(date_str1 ,date_str2){  
    534.     if(date_str1 ==null){  
    535.         date_str1='';  
    536.     }     
    537.     if(date_str2==null ){  
    538.         date_str2='';  
    539.     }     
    540.   
    541.     if(date_str1 ==date_str2){  
    542.         return 0;  
    543.     }  
    544.       
    545.     if( !g_IsDateTime(date_str1) && !g_IsDate(date_str1)|| !g_IsDateTime(date_str2) && !g_IsDate(date_str2) ){  
    546.         alert(g_I18NMessage("appframe_core","commutil_comparedate_err"));  
    547.         //抛出异常  
    548.         throw new Error(g_I18NMessage("appframe_core","commutil_not_date"));  
    549.     }  
    550.   
    551.     //解析时间字符串  
    552.     var year1 =0;  
    553.     var month1 =0;  
    554.     var day1 =0;  
    555.     var dateTimeArray = date_str1.split(" ");  
    556.     var dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
    557.     year1=dateArray[0];  
    558.     month1=dateArray[1];  
    559.     day1=dateArray[2];  
    560.       
    561.     var year2 =0;  
    562.     var month2 =0;  
    563.     var day2 =0;  
    564.     dateTimeArray = date_str2.split(" ");  
    565.     dateArray  = dateTimeArray[0].split(DATE_SEPARATOR);  
    566.     year2=dateArray[0];  
    567.     month2=dateArray[1];  
    568.     day2=dateArray[2];  
    569.       
    570.     return (year1-year2)*12+(month1-month2);  
    571. }  
    572.   
    573. //校验密码是否合法 ,8位非空字母 ,包含数字和字母  
    574. function checkPSWFormatValid(psw){  
    575.   if(psw==null || psw.length<8){  
    576.     alert(g_I18NMessage("appframe_core","commutil_pwd_len"));  
    577.     return false;  
    578.   }  
    579.   if(psw.indexOf(' ')>-1 || psw.indexOf('&')>-1){  
    580.     alert(g_I18NMessage("appframe_core","commutil_pwd_black"));  
    581.     return false;  
    582.   }  
    583.   
    584.   var bNumber = false;//判断密码是否含有数字  
    585.   var bAlphe = false//判断是否含有英文字母  
    586.   
    587.   for (i = 0;  i < psw.length;  i++){  
    588.       //如果含有英文字母和数字,则返回true  
    589.       if(bNumber && bAlphe ){  
    590.         return true;  
    591.       }  
    592.       code = psw.charCodeAt(i);  
    593.       //判断是否包含数字  
    594.       if(!bNumber){  
    595.         if(code>=48 && code<=57){  
    596.            bNumber = true;  
    597.            continue;  
    598.         }  
    599.       }  
    600.       //判断是否包含英文字母  
    601.       if(!bAlphe){  
    602.         if(code>=65 && code<=90 || code>=97 && code<=122){  
    603.            bAlphe = true;  
    604.         }  
    605.       }  
    606.    }  
    607.    if(bNumber && bAlphe ){  
    608.         return true;  
    609.    }  
    610.    alert(g_I18NMessage("appframe_core","commutil_pwd_all"));  
    611.    return false;  
    612. }  
    613.   
    614.   
    615. /********************************************************************************* 
    616. * FUNCTION: 格式化日期时间方法 
    617. * PARAMETER: aDate:js中的aDate对象,format-格式字符串.如:yyyy-MM-dd hh:mm:ss 
    618. * RETURNS: 格式后的日期时间字符串 
    619. * AUTHOR:ZLH 
    620. *********************************************************************************/  
    621. function g_FormatDate(aDate,format)  
    622.   {  
    623.     var o = {  
    624.     "M+" : aDate.getMonth()+1, //month  
    625.     "d+" : aDate.getDate(),    //day  
    626.     "h+" : aDate.getHours(),   //hour  
    627.     "m+" : aDate.getMinutes(), //minute  
    628.     "s+" : aDate.getSeconds(), //second  
    629.     "q+" : Math.floor((aDate.getMonth()+3)/3),  //quarter  
    630.     "S" : aDate.getMilliseconds() //millisecond  
    631.     }  
    632.     if(/(y+)/.test(format)) format=format.replace(RegExp.$1,  
    633.     (aDate.getFullYear()+"").substr(4 - RegExp.$1.length));  
    634.     for(var k in o)if(new RegExp("("+ k +")").test(format))  
    635.     format = format.replace(RegExp.$1,  
    636.     RegExp.$1.length==1 ? o[k] :  
    637.     ("00"+ o[k]).substr((""+ o[k]).length));  
    638.     return format;  
    639.   }  
    640.   
    641. /********************************************************************************* 
    642. * FUNCTION: 粘贴时控制只能贴入数字和回车 
    643. * PARAMETER: null 
    644. * RETURNS: null 
    645. *********************************************************************************/  
    646. function g_BeforePasteNum(){  
    647.   var str = window.clipboardData.getData('text');  
    648.   if(str!=null){  
    649.     str = str.replace(/[^\d\n]/g,'');  
    650.     str = str.replace(/[\n]+/g,'\n');  
    651.     str = str.replace(/(^\s*)|(\s*$)/g, "");  
    652.     window.clipboardData.setData('Text',str);  
    653.   }  
    654. }  
    655.   
    656. /********************************************************************************* 
    657. * FUNCTION: 粘贴时控制只能贴入数字和字母 
    658. * PARAMETER: null 
    659. * RETURNS: null 
    660. *********************************************************************************/  
    661. function g_BeforePasteEnglish(){  
    662.   var str = window.clipboardData.getData('text');  
    663.   if(str!=null){  
    664.     str = str.replace(/[\W]/g,'');  
    665.     window.clipboardData.setData('Text',str);  
    666.   }  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值