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

js学习之道:表单验证公共js的更多相关文章

  1. jquery.validate.js使用之自定义表单验证规则

    jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...

  2. JS组件系列——Form表单验证神器: BootstrapValidator

    前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...

  3. js 策略模式 实现表单验证

    策略模式 简单点说就是:实现目标的方式有很多种,你可以根据自己身情况选一个方法来实现目标. 所以至少有2个对象 .  一个是策略类,一个是环境类(上下文). 然后自己就可以根据上下文选择不同的策略来执 ...

  4. AngularJS学习笔记(二) 表单验证案例(ng-repeat/filter)

    这一节相对来说需要理解的东西不是太多,记住了那些api就行了. 还是一个案例(同样来自miaov),一个表单验证,先上代码,然后再对对应的内容进行解释. <!DOCTYPE html> & ...

  5. Django学习笔记之表单验证

    表单概述 HTML中的表单 单纯从前端的html来说,表单是用来提交数据给服务器的,不管后台的服务器用的是Django还是PHP语言还是其他语言.只要把input标签放在form标签中,然后再添加一个 ...

  6. JavaScript入门学习笔记(表单验证)

    表单验证: 在数据被送到服务器之前对HTML表单中的输入数据进行验证,避免服务器频繁验证信息造成用户体验差. (1)表单数据是否为空 (2)输入的信息格式是否正确 (3)输入数据的类型是否正确 必填( ...

  7. js实现表单验证 常用JS表单验证

    CSS代码 @charset "gb2312"; /* CSS Document */ body,dl,dt,dd,div,form {padding:;margin:;} #he ...

  8. 云平台项目--学习经验--BootstrapValidate表单验证插件

    使用前提,需要加载jquery和bootstrap库.并且引入bootstrapValidator.js和bootstrapValidator.css文件然后建立一个form表单,添加表单控件,表单控 ...

  9. JS学习笔记7_表单脚本

    1.获取表单及表单元素引用的方式 var mForm = document.forms[formName];获取表单引用 mForm.elements[elemName]获取表单元素,如有同名的,则得 ...

随机推荐

  1. android开发 解决启动页空白或黑屏问题

    遇到的情况: app启动时进入启动页时出现白屏页,然后大概一秒之后就出现了背景图片. 原因:app启动时加载的是windows背景,之后再加载布局文件的,所以开始的黑屏/白屏就是windows的背景颜 ...

  2. Drawing with GoogLeNet

    Drawing with GoogLeNet In my previous post, I showed how you can use deep neural networks to generat ...

  3. Understanding Convolution in Deep Learning

    Understanding Convolution in Deep Learning Convolution is probably the most important concept in dee ...

  4. 各大公司广泛使用的在线学习算法FTRL详解

    各大公司广泛使用的在线学习算法FTRL详解 现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression),而传统的批量(batch)算法无法有效地处理超大规模的数据集和在线数据 ...

  5. wifi current SSID

    1. 引入头,#import <SystemConfiguration/CaptiveNetwork.h> 2. 获取SSID info + (id)fetchSSIDInfo { NSA ...

  6. MX记录

    是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据 收信人的地址后缀来定位邮件服务器.MX记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然 ...

  7. UVA 562 Dividing coins (01背包)

    题意:给你n个硬币,和n个硬币的面值.要求尽可能地平均分配成A,B两份,使得A,B之间的差最小,输出其绝对值.思路:将n个硬币的总价值累加得到sum,   A,B其中必有一人获得的钱小于等于sum/2 ...

  8. Flatty Shadow在线为Icon图标生成长阴影效果。

    Flatty Shadow在线为Icon图标生成长阴影效果. Flatty Shadow 彩蛋爆料直击现场 Flatty Shadow在线为Icon图标生成长阴影效果.

  9. ExtJs之DHTML,DOM,EXTJS的事件绑定区别

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  10. 优化DB2缓冲页的大小

    零部件日结无法进行下去,建议配置C:\Program Files\SQLLIB目录下的db2cli.ini文件,加入此节:[DMSCNDB]CLIPkg=5 并重启DB2试试 另外,可以在命令行处理器 ...