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. bzoj 2002 LCT

    LCT最基础的题,就用到了一个ACCESS操作 首先我们将这个绵羊弹飞的情况看成一颗树,那么假设X点被弹飞到 Y点,那么Y为X的父亲节点,弹飞的话父亲节点为n+1(虚设) 那么每个询问就是询问X点到根 ...

  2. 2014 ACM/ICPC Asia Regional Guangzhou Online

    Wang Xifeng's Little Plot http://acm.hdu.edu.cn/showproblem.php?pid=5024 预处理出每个点八个方向能走的最远距离,然后枚举起点,枚 ...

  3. 用npm安装express后express命令找不到

    Windows 平台加了 npm install -g express 也不行AppData\Roaming\npm 下面没有 express.bat 解决办法: sudo npm install - ...

  4. JS控制图片拖动 放大 缩小 旋转 支持滚轮放大缩小 IE有效

    <html> <head>     <title>图片拖动,放大,缩小,转向</title> <script type="text/ja ...

  5. 利用URLRewriter.dll 实现ASP.NET实现伪静态

    大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访 ...

  6. c#实现串口操作 SerialPort

    命名空间:using System.IO.Ports;该类提供了同步 I/O 和事件驱动的 I/O.对管脚和中断状态的访问以及对串行驱动程序属性的访问. 操作类声明: SerialPort sp = ...

  7. F.I.S本地环境的搭建教程

    一.准备开发环境: 1.安装JRE 2.安装nodejs 最好是msi文件,比较省事. 3.(如果是PHP项目)安装php. 首先下载php(我的是5.5.15版本,win7 64位系统) zip,然 ...

  8. GCD使用小结

    - ( * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{         NSLog(; i < ; i ++) {         [self o ...

  9. UITableView中cell的圆角(第一个和最后一个)

    , , _width, _height)];     ;     view.clipsToBounds = YES;          _viewDetal = [[UIView alloc]init ...

  10. MFC中错误知识总结(一)

    1.在继承与派生中,单目:表示派生,双目::表示继承,例如 class A { public: void c(); }; class B: public A {}; //类B继承类A void A:: ...