validate.js 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  1. /*
  2. 非空校验 : isNull()
  3. 是否是数字: isNumber(field)
  4. trim函数: trim() lTrim() rTrim()
  5. 校验字符串是否为空: checkIsNotEmpty(str)
  6. 校验字符串是否为整型: checkIsInteger(str)
  7. 校验整型最小值: checkIntegerMinValue(str,val)
  8. 校验整型最大值: checkIntegerMaxValue(str,val)
  9. 校验整型是否为非负数: isNotNegativeInteger(str)
  10. 校验字符串是否为浮点型: checkIsDouble(str)
  11. 校验字符串是否为日期型: checkIsValidDate(str)
  12. 校验两个日期的先后: checkDateEarlier(strStart,strEnd)
  13. 校验字符串是否为email型: checkEmail(str)
  14. 校验字符串是否为中文: checkIsChinese(str)
  15. 计算字符串的长度,一个汉字两个字符: fucCheckLength()
  16. 判断下拉列表框是否取值: getComboValue(field)
  17. 校验电话号(传真号) validateTel(str)
  18. 校验手机号 validateMonoTel(str)
  19. 校验字符串由字母,数字或两者组合而成 checkIsStrNum(str)
  20. 验证字符串是否只由字母组合而成 checkIsChar(str)
  21. 验证金额,成绩等可以带小数点数字的格式 validateResult(str,num1,num2)
  22. 计算两个日期之间的差值 dateDiff(interval, date1, date2)
  23. 验证是否为,或最大长度中文两个符 isNotNull(arg1,arg2,arg3)
  24. 验证输入值是否是月份 isMonth(validateMonth)
  25. 验证输入值是否是年份 isYear(validateYear)
  26. --------------------------------------------------------------------
  27. 验证小数和负数 chknbr(num,opt1,opt2)
  28. //opt1 小数 opt2 负数
  29. //当opt1为1时检查num是否是小数
  30. //当opt2为1时检查num是否是负数
  31. //返回true是正确的,false是错误的
  32. --------------------------------------------------------------------
  33. 四舍五入函数: round(input,exact)//input 数值 exact 精确的位数
  34. 得到文件的后缀名: getFilePostfix(oFile)
  35. */
  36. //=================================================================
  37. //function:isNull()
  38. //非空校验
  39. //==================================================================
  40. function isNull(aForm,fieldArray)
  41. {
  42. if (confirm("您确认要进行此操作吗?"))
  43. {
  44. for (var i=0;i<(aForm.elements.length);i++)
  45. {
  46. var el=aForm.elements[i];
  47. for(var j=1;j<=fieldArray.length;j++)
  48. {
  49. if (el.name==fieldArray[j])
  50. {
  51. if(trim(el.value)=="")
  52. {
  53. setMessage("焦点处的值不能为空:"+fieldArray[j]+"!");
  54. el.focus();
  55. return true;
  56. }
  57. }
  58. }
  59. }
  60. return false;
  61. }
  62. else
  63. {
  64. return true;
  65. }
  66. }
  67. //==================================================================
  68. // function isNumber(field)
  69. // 判断input text 的是否是数字.
  70. // return: true or false field为空返回false
  71. //==================================================================
  72. function isNumber(field){
  73. //var re = new RegExp(/^\d+.*$/);
  74. var re = /^\d+(?=\.{0,1}\d+$|$)/;
  75. return re.test(trim(field.value));
  76. }
  77. function LTrim(str)
  78. {
  79. var whitespace = new String(" \t\n\r");
  80. var s = new String(str);
  81. if (whitespace.indexOf(s.charAt(0)) != -1)
  82. {
  83. var j=0, i = s.length;
  84. while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
  85. {
  86. j++;
  87. }
  88. s = s.substring(j, i);
  89. }
  90. return s;
  91. }
  92. function RTrim(str)
  93. {
  94. var whitespace = new String(" \t\n\r");
  95. var s = new String(str);
  96. if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
  97. {
  98. var i = s.length - 1;
  99. while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
  100. {
  101. i--;
  102. }
  103. s = s.substring(0, i+1);
  104. }
  105. return s;
  106. }
  107. function trim(str)
  108. {
  109. return RTrim(LTrim(str));
  110. }
  111. /********************************** Empty **************************************/
  112. /**
  113. *校验字符串是否为空
  114. *返回值:
  115. *如果不为空,定义校验通过,返回true
  116. *如果为空,校验不通过,返回false 参考提示信息:输入域不能为空!
  117. */
  118. function checkIsNotEmpty(str)
  119. {
  120. if(trim(str)== "")
  121. return false;
  122. else
  123. return true;
  124. }
  125. /*--------------------------------- Empty --------------------------------------*/
  126. /********************************** Integer *************************************/
  127. /**
  128. *校验字符串是否为整型
  129. *返回值:
  130. *如果为空,定义校验通过, 返回true
  131. *如果字串全部为数字,校验通过,返回true
  132. *如果校验不通过, 返回false 参考提示信息:输入域必须为数字!
  133. */
  134. function checkIsInteger(str)
  135. {
  136. //如果为空,不通过校验
  137. if(trim(str) == "")
  138. return false;
  139. var strr=trim(str);
  140. if(new RegExp(/^(\d+)$/).test(strr))
  141. return true;
  142. else
  143. return false;
  144. }//~~~
  145. /**
  146. *校验整型最小值
  147. *str:要校验的串。 val:比较的值
  148. *
  149. *返回值:
  150. *如果为空,定义校验通过, 返回true
  151. *如果满足条件,大于等于给定值,校验通过,返回true
  152. *如果小于给定值, 返回false 参考提示信息:输入域不能小于给定值!
  153. */
  154. function checkIntegerMinValue(str,val)
  155. {
  156. //如果为空,则通过校验
  157. if(str == "")
  158. return true;
  159. if(typeof(val) != "string")
  160. val = val + "";
  161. if(checkIsInteger(str) == true)
  162. {
  163. if(parseInt(str,10)>=parseInt(val,10))
  164. return true;
  165. else
  166. return false;
  167. }
  168. else
  169. return false;
  170. }//~~~
  171. /**
  172. *校验整型最大值
  173. *str:要校验的串。 val:比较的值
  174. *
  175. *返回值:
  176. *如果为空,定义校验通过, 返回true
  177. *如果满足条件,小于等于给定值,校验通过,返回true
  178. *如果大于给定值, 返回false 参考提示信息:输入值不能大于给定值!
  179. */
  180. function checkIntegerMaxValue(str,val)
  181. {
  182. //如果为空,则通过校验
  183. if(str == "")
  184. return true;
  185. if(typeof(val) != "string")
  186. val = val + "";
  187. if(checkIsInteger(str) == true)
  188. {
  189. if(parseInt(str,10)<=parseInt(val,10))
  190. return true;
  191. else
  192. return false;
  193. }
  194. else
  195. return false;
  196. }//~~~
  197. /**
  198. *校验整型是否为非负数
  199. *str:要校验的串。
  200. *
  201. *返回值:
  202. *如果为空,定义校验通过,返回true
  203. *如果非负数, 返回true
  204. *如果是负数, 返回false 参考提示信息:输入值不能是负数!
  205. */
  206. function isNotNegativeInteger(str)
  207. {
  208. //如果为空,则通过校验
  209. if(str == "")
  210. return true;
  211. if(checkIsInteger(str) == true)
  212. {
  213. if(parseInt(str,10) < 0)
  214. return false;
  215. else
  216. return true;
  217. }
  218. else
  219. return false;
  220. }//~~~
  221. /*--------------------------------- Integer --------------------------------------*/
  222. /********************************** Double ****************************************/
  223. /**
  224. *校验字符串是否为浮点型
  225. *返回值:
  226. *如果为空,定义校验通过, 返回true
  227. *如果字串为浮点型,校验通过, 返回true
  228. *如果校验不通过, 返回false 参考提示信息:输入域不是合法的浮点数!
  229. */
  230. function checkIsDouble(str)
  231. {
  232. //如果为空,则通过校验
  233. if(trim(str) == "")
  234. return true;
  235. //如果是整数,则校验整数的有效性
  236. if(str.indexOf(".") == -1)
  237. {
  238. if(checkIsInteger(str) == true)
  239. return true;
  240. else
  241. return false;
  242. }
  243. else
  244. {
  245. if(new RegExp(/^(\-?)(\d+)(.{1})(\d+)$/g).test(trim(str)))
  246. return true;
  247. else
  248. return false;
  249. }
  250. }//~~~
  251. /*--------------------------------- Double ---------------------------------------*/
  252. /********************************** date ******************************************/
  253. /**
  254. *校验字符串是否为日期型
  255. *返回值:
  256. *如果为空,定义校验通过, 返回false
  257. *如果字串为日期型,校验通过, 返回true
  258. *如果日期不合法, 返回false 参考提示信息:输入域的时间不合法!(yyyy-MM-dd)
  259. */
  260. function checkIsValidDate(str)
  261. {
  262. //如果为空,则通过校验
  263. if(trim(str) == "")
  264. return false;
  265. var pattern = new RegExp(/^((\d{4})|(\d{2}))-(\d{1,2})-(\d{1,2})$/g);
  266. if(!pattern.test(str))
  267. return false;
  268. var arrDate = str.split("-");
  269. if(parseInt(arrDate[0],10) < 100)
  270. arrDate[0] = 2000 + parseInt(arrDate[0],10) + "";
  271. var date = new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]);
  272. // date.getYear() == arrDate[0]
  273. // &&
  274. if( date.getMonth() == (parseInt(arrDate[1],10) -1)+""
  275. && date.getDate() == arrDate[2])
  276. return true;
  277. else
  278. return false;
  279. }
  280. /**
  281. *校验字符串是否为日期型 YYYY-MM-DD
  282. *返回值:
  283. *如果为空,定义校验通过, 返回true
  284. *如果字串为日期型,校验通过, 返回true
  285. *如果日期不合法, 返回false 参考提示信息:输入域的时间不合法!(yyyy-MM-dd)
  286. */
  287. function isDate(str)
  288. {
  289. //如果为空,则通过校验
  290. if((null != str && "null" != str) && "" == str)
  291. return true;
  292. //校验日期 格式为YYYY-MM-DD
  293. var pattern = new RegExp(/^(\d{4})-(\d{1,2})-(\d{1,2})$/g);
  294. if(!pattern.test(str))
  295. return false;
  296. var arrDate = str.split("-");
  297. var date = new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]);
  298. if( date.getMonth() == (parseInt(arrDate[1],10) -1)+""
  299. && date.getDate() == arrDate[2])
  300. return true;
  301. else
  302. return false;
  303. }
  304. /**
  305. *校验字符串是否为日期型 YYYY-MM
  306. *返回值:
  307. *如果为空,定义校验通过, 返回true
  308. *如果字串为日期型,校验通过, 返回true
  309. *如果日期不合法, 返回false 参考提示信息:输入域的时间不合法!(yyyy-MM-dd)
  310. */
  311. function isDateYM(str)
  312. {
  313. //如果为空,则通过校验
  314. if((null != str && "null" != str) && "" == str)
  315. return true;
  316. else
  317. return isDate(str+'-01');
  318. }
  319. function isYearValidate(str)
  320. {
  321. if('' == str){
  322. return true;
  323. }else{
  324. var pattern = new RegExp(/^(\d{4})$/g);
  325. if(!pattern.test(str)){
  326. return false;
  327. }
  328. return true;
  329. }
  330. return false;
  331. }
  332. /*
  333. function checkIsValidDate(aForms,fieldArray)
  334. {
  335. //如果为空,则通过校验
  336. for (var i=0;i<(aForms.elements.length);i++)
  337. {
  338. var el=aForms.elements[i];
  339. for(var j=0;j<fieldArray.length;j++)
  340. {
  341. if (el.name==fieldArray[j])
  342. {
  343. if(el.value =="")
  344. {
  345. return true;
  346. }
  347. else
  348. {
  349. var pattern = /^((\d{4})|(\d{2}))-(\d{1,2})-(\d{1,2})$/g;
  350. if(!pattern.test(el.value))
  351. return false;
  352. var arrDate = el.value.split("-");
  353. if(parseInt(arrDate[0],10) < 100)
  354. arrDate[0] = 2000 + parseInt(arrDate[0],10) + "";
  355. var date = new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]);
  356. if(date.getYear() == arrDate[0]
  357. && date.getMonth() == (parseInt(arrDate[1],10) -1)+""
  358. && date.getDate() == arrDate[2])
  359. return true;
  360. else
  361. return false;
  362. }
  363. }
  364. }
  365. }
  366. }*/
  367. //~~~
  368. /**
  369. *校验两个日期的先后
  370. *返回值:
  371. *如果其中有一个日期为空,校验通过, 返回true
  372. *如果起始日期早于等于终止日期,校验通过, 返回true
  373. *如果起始日期晚于终止日期, 返回false 参考提示信息: 起始日期不能晚于结束日期。
  374. */
  375. function checkDateEarlier(strStart,strEnd)
  376. {
  377. if(checkIsValidDate(strStart) == false || checkIsValidDate(strEnd) == false)
  378. return false;
  379. //如果有一个输入为空,则通过检验
  380. if (( strStart == "" ) || ( strEnd == "" ))
  381. return true;
  382. var arr1 = strStart.split("-");
  383. var arr2 = strEnd.split("-");
  384. var date1 = new Date(arr1[0],parseInt(arr1[1].replace(/^0/,""),10) - 1,arr1[2]);
  385. var date2 = new Date(arr2[0],parseInt(arr2[1].replace(/^0/,""),10) - 1,arr2[2]);
  386. if(arr1[1].length == 1)
  387. arr1[1] = "0" + arr1[1];
  388. if(arr1[2].length == 1)
  389. arr1[2] = "0" + arr1[2];
  390. if(arr2[1].length == 1)
  391. arr2[1] = "0" + arr2[1];
  392. if(arr2[2].length == 1)
  393. arr2[2]="0" + arr2[2];
  394. var d1 = arr1[0] + arr1[1] + arr1[2];
  395. var d2 = arr2[0] + arr2[1] + arr2[2];
  396. if(parseInt(d1,10) > parseInt(d2,10))
  397. return false;
  398. else
  399. return true;
  400. }
  401. //~~~
  402. /*--------------------------------- date -----------------------------------------*/
  403. /********************************** email *****************************************/
  404. /**
  405. *校验字符串是否为email型
  406. *返回值:
  407. *如果为空,定义校验通过, 返回true
  408. *如果字串为email型,校验通过, 返回true
  409. *如果email不合法, 返回false 参考提示信息:Email的格式不正確!
  410. */
  411. function checkEmail(str)
  412. {
  413. //如果为空,则通过校验
  414. if(trim(str) == "")
  415. return true;
  416. if (str.charAt(0) == "." || str.charAt(0) == "@" || str.indexOf('@', 0) == -1
  417. || str.indexOf('.', 0) == -1 || str.lastIndexOf("@") == str.length-1 || str.lastIndexOf(".") == str.length-1)
  418. return false;
  419. else
  420. return true;
  421. }//~~~
  422. /*--------------------------------- email ----------------------------------------*/
  423. /********************************** chinese ***************************************/
  424. /**
  425. *校验字符串是否为中文
  426. *返回值:
  427. *如果为空,定义校验通过, 返回true
  428. *如果字串为中文,校验通过, 返回true
  429. *如果字串为非中文, 返回false 参考提示信息:必须为中文!
  430. */
  431. function checkIsChinese(str)
  432. {
  433. //如果值为空,通过校验
  434. if (str == "")
  435. return true;
  436. var pattern = /^([\u4E00-\u9FA5]|[\uFE30-\uFFA0])*$/gi;
  437. if (pattern.test(str))
  438. return true;
  439. else
  440. return false;
  441. }
  442. //判断下拉列表框是否取值
  443. function getComboValue(field)
  444. {
  445. if (document.getElementById(field).value=="")
  446. {
  447. setMessage('请选择');
  448. document.forms[0].field.focus();
  449. return;
  450. }
  451. }
  452. //是否为有效年
  453. function isYear(aForm,field)
  454. {
  455. for (var i=0;i<(aForm.elements.length);i++)
  456. {
  457. var el=aForm.elements[i];
  458. if (el.name==field)
  459. {
  460. if (document.getElementById(field).value>=1900 && document.getElementById(field).value<=2053)
  461. {
  462. }
  463. else
  464. {
  465. //setMessage('当前年份无效!');
  466. //aForm.field.focus();
  467. return false;
  468. }
  469. }
  470. }
  471. return true;
  472. }
  473. function JHshNumberText()
  474. {
  475. if ( !(((window.event.keyCode >= 48) && (window.event.keyCode <= 57))
  476. || (window.event.keyCode == 13) || (window.event.keyCode == 46)
  477. || (window.event.keyCode == 45)))
  478. {
  479. window.event.keyCode = 0 ;
  480. }
  481. }
  482. //函数名:fucCheckLength
  483. //功能介绍:检查字符串的长度
  484. //参数说明:要检查的字符串
  485. //返回值:长度值
  486. function fucCheckLength(strTemp)
  487. {
  488. var i,sum;
  489. sum=0;
  490. for(i=0;i<strTemp.length;i++)
  491. {
  492. if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255))
  493. sum=sum+1;
  494. else
  495. sum=sum+2;
  496. }
  497. return sum;
  498. }
  499. //add by hongxin_ma
  500. //opt1 小数 opt2 负数
  501. //当opt1为1时检查num是否是小数
  502. //当opt2为1时检查num是否是负数
  503. //返回true是正确的,false是错误的
  504. function chknbr(num,opt1,opt2)
  505. {
  506. //第一个字符为"." 返回false
  507. if(num.charAt(0)=='.')return false;
  508. var i=num.length;
  509. var staus;
  510. //staus用于记录.的个数
  511. status=0;
  512. if ((opt2!=1) && (num.charAt(0)=='-'))
  513. {
  514. //setMessage("You have enter a invalid number.");
  515. return false;
  516. }
  517. //当最后一位为.时出错
  518. if (num.charAt(i-1)=='.')
  519. {
  520. //setMessage("You have enter a invalid number.");
  521. return false;
  522. }
  523. for (j=0;j<num.length ; j++){
  524. if (num.charAt(j)=='.')
  525. {
  526. status++;
  527. }
  528. if (status>1)
  529. {
  530. //setMessage("You have enter a invalid number.");
  531. return false;
  532. }
  533. if (num.charAt(j)<'0' || num.charAt(j)>'9' )
  534. {
  535. if (((opt1==0) || (num.charAt(j)!='.')) && (j!=0))
  536. {
  537. //setMessage("You have enter a invalid number.");
  538. return false;
  539. }
  540. }
  541. }
  542. return true;
  543. }
  544. /*
  545. *add by hongxin_ma四舍五入函数
  546. *@param input 输入的原值
  547. *@param exact 精确的位数
  548. */
  549. function round(input,exact){
  550. if(exact==0){
  551. if(new RegExp(/^\d+.*$/).test(input))
  552. {
  553. input=parseFloat(input)+0.5;
  554. return parseInt(input,'10');
  555. }else if(new RegExp(/^\-\d+.*$/).test(input)){
  556. input=parseFloat(input)-0.5;
  557. return parseInt(input,'10');
  558. }
  559. else
  560. {
  561. return input
  562. };
  563. }
  564. var substract = '0.';
  565. var result = '';
  566. for(var i=0;i<exact;i++){
  567. substract+='0';
  568. }
  569. substract+='5';
  570. try{
  571. if(parseFloat(input)>0)
  572. {
  573. result = parseFloat(input)+parseFloat(substract);
  574. }else
  575. {
  576. result = parseFloat(input)-parseFloat(substract);
  577. }
  578. result = result.toString();
  579. var end = parseInt(result.indexOf("."),"10")+parseInt(exact,"10")+1;
  580. result = result.substring(0,end);
  581. }catch(e){
  582. return result;
  583. }
  584. if(result==-0)
  585. {
  586. result = Math.abs(result);
  587. }
  588. return result;
  589. }
  590. /**
  591. * add by hongpeng_dong 2007.05.11
  592. * 验证字符串是否是电话号码,传真
  593. * 区号为3-4位 可以不写 区号后可以带一个-号,号码为3-8位)
  594. * 允许空值
  595. * @param 字符串
  596. * @return 合理true 否则为false 空返回true
  597. */
  598. function validateTel(str){
  599. if('' == trim(str))
  600. return true;
  601. var pattern = new RegExp(/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)/);
  602. return pattern.exec(str);
  603. }
  604. /**
  605. * add by hongpeng_dong 2007.12.11
  606. * 验证字符串是否是电话号码,传真
  607. * 格式为 区号(3-4位)-号码(3-8位) 如:0431-85667788
  608. * 允许空值
  609. * @param 字符串
  610. * @return 合理true 否则为false 空返回true
  611. */
  612. function validateTelToo(str){
  613. if('' == trim(str))
  614. return true;
  615. var pattern = new RegExp(/^[0-9]{3,4}\-[0-9]{3,8}$/);
  616. return pattern.exec(str);
  617. }
  618. /**
  619. * add by hongpeng_dong 2007.05.11
  620. * 验证字符串是否是手机号 (必须以1打头 前面可以加0 其它为10位)
  621. * 允许空值
  622. * @param 字符串
  623. * @return 合理true 否则为false 空返回true
  624. */
  625. function validateMonoTel(str){
  626. if('' == trim(str))
  627. return true;
  628. var pattern = new RegExp(/^0{0,1}1[0-9]{10}$/);
  629. return pattern.test(str);
  630. }
  631. /**
  632. * add by hongpeng_dong 2007.04.03
  633. * 验证字符串是否只由字母,数字或两者组合而成
  634. * @param 字符串
  635. * @return 是true 非false
  636. */
  637. function checkIsStrNum(str){
  638. if(new RegExp(/^[a-zA-Z0-9]*$/g).test(str)){
  639. return true;
  640. }
  641. return false;
  642. }
  643. /**
  644. * add by chun_chang 2007.05.15
  645. * 验证字符串是否只由字母组合而成
  646. * @param 字符串
  647. * @return 是true 非false
  648. */
  649. function checkIsChar(str){
  650. if(new RegExp(/^[a-zA-Z]*$/g).test(str)){
  651. return true;
  652. }
  653. return false;
  654. }
  655. /**
  656. * add by hongpeng_dong 2007.05.12
  657. * 验证金额,成绩等可以带小数点数字的格式
  658. * @param str(要验证的字符串) num1(整数部分允许的最大长度) num2(小数点后允许的最大长度)
  659. * num1 num2 要求均为大于0的正整数 否则直接返回false
  660. * @return 格式正确true 不正确false
  661. * (正确格式可以为不含小数点的正整数,长度最大为传入的数值;如果str为空,返回true)
  662. */
  663. function validateResult(str,num1,num2){
  664. if('' == trim(str))
  665. return true;
  666. if(num1 ==0 || num2 == 0)
  667. return false;
  668. var v1 = '';
  669. var v2 = '';
  670. if(num1 != 1)
  671. v1=',' + num1;
  672. if(num2 != 1)
  673. v2 = ','+num2;
  674. var re = new RegExp('\(^[0-9]{1'+v1+'}\\.[0-9]{1'+v2+'}$)|(^[0-9]{1'+v1+'}$)');
  675. return re.test(str);
  676. }
  677. /**
  678. * 计算两个日期之间的差值
  679. * 使用方法:(eg): alert(dateDiff('h', '2007-4-14', '2007-4-19'));
  680. * h 表示 HOUR, D 表示 day, M 表示 minute, s 表示 second
  681. */
  682. function dateDiff(interval, date1, date2)
  683. {
  684. var objInterval = {'D' : 1000 * 60 * 60 * 24, 'H' : 1000 * 60 * 60, 'M' : 1000 * 60, 'S' : 1000};
  685. interval = interval.toUpperCase();
  686. var dt1 = Date.parse(date1.replace(/-/g, '/'));
  687. var dt2 = Date.parse(date2.replace(/-/g, '/'));
  688. try
  689. {
  690. return Math.round((dt2 - dt1) / eval('(objInterval.' + interval + ')'));
  691. }
  692. catch (e)
  693. {
  694. return e.message;
  695. }
  696. dt1 = null;
  697. dt2 = null;
  698. objInterval = null;
  699. }
  700. /*
  701. add by sihua_yao
  702. 校验网站url
  703. 只允许输入http:// https://的
  704. 参数 :url 为对象
  705. */
  706. function checkWebUrl(url)
  707. {
  708. if(url.value==""||url.value=="http://"||url.value=="https://")
  709. {
  710. setMessage ("请填写正确的网址!如http://www.ideal.com!");
  711. return false;
  712. }
  713. if(url.value.length<8)
  714. {
  715. setMessage("请填写正确的网址!如http://www.ideal.com!");
  716. //url.focus();
  717. return false;
  718. }
  719. if ( url.value.substring(0, 7)!="http://" && url.value.substring(0, 8)!="https://" )
  720. {
  721. setMessage ("请填写正确的网址!如http://www.ideal.com!");
  722. return false;
  723. }
  724. if(url.value.substring(0, 7)=="http://")
  725. {
  726. var s="";
  727. s=url.value.substring(7,url.value.length);
  728. var a=s.indexOf(".", 0);
  729. if(a=="-1")
  730. {
  731. setMessage ("请填写正确的网址!如http://www.ideal.com!");
  732. //url.focus();
  733. return false;
  734. }
  735. var s1=s.substring(a+1,s.length)
  736. var b=s1.indexOf(".", 0);
  737. if(b=="-1")
  738. {
  739. setMessage ("请填写正确的网址!如http://www.ideal.com!");
  740. //url.focus();
  741. return false;
  742. }
  743. return true;
  744. }
  745. if(url.value.substring(0, 8)=="https://")
  746. {
  747. var s="";
  748. s=url.value.substring(8,url.value.length);
  749. var a=s.indexOf(".", 0);
  750. if(a=="-1")
  751. {
  752. setMessage ("请填写正确的网址!如http://www.ideal.com!");
  753. //url.focus();
  754. return false;
  755. }
  756. var s1=s.substring(a+1,s.length)
  757. var b=s1.indexOf(".", 0);
  758. if(b=="-1")
  759. {
  760. setMessage ("请填写正确的网址!如http://www.ideal.com!");
  761. //url.focus();
  762. return false;
  763. }
  764. return true;
  765. }
  766. }
  767. /**
  768. * added by hongpeng_dong 2007.11.21
  769. * 得到文件的后缀名
  770. * oFile为file控件对象
  771. */
  772. function getFilePostfix(oFile)
  773. {
  774. if(oFile == null)
  775. return null;
  776. var pattern = /(.*).(.*)$/gi;
  777. if(typeof(oFile) == "object")
  778. {
  779. if(oFile.value == null || oFile.value == "")
  780. return null;
  781. var arr = pattern.exec(oFile.value);
  782. return RegExp.$2;
  783. }
  784. else if(typeof(oFile) == "string")
  785. {
  786. var arr = pattern.exec(oFile);
  787. return RegExp.$2;
  788. }
  789. else
  790. return null;
  791. }
  792. /**
  793. * add by wei_liu at 2007-02-3
  794. * 验证是否为空
  795. * arg1为验证的文档的id
  796. * arg2为验证的文档名称
  797. * aarg3文档的最大长度,可以不用验证,只需传递两个前个就可以
  798. * example funcion aa(){
  799. * if(!isNotNull('voteTitle',"标题",20)){return ;}
  800. * 其它操作other action
  801. * }
  802. * 也可以不用验证长度
  803. * example function aa(){
  804. * if(!isNotNull('voteTitle',"标题")){return ;}
  805. * }
  806. * ***********************验证通过返回true
  807. */
  808. function isNotNull(arg1,arg2,arg3)
  809. {
  810. if(document.getElementById(arg1)){
  811. if(trim(document.getElementById(arg1).value) =='')
  812. {
  813. setMessage('请填写'+arg2+'!');
  814. return false;
  815. }
  816. if(arg3 !='' && typeof(arg3)!='' && arg3 !=null && arg3 != 'undefined')
  817. {
  818. if(!maxLongById(arg1,arg3,arg2)){return false;}
  819. }
  820. return true;
  821. }else{
  822. setMessage('你要验证的字段不存在或ID重复定义');
  823. return false;
  824. }
  825. }
  826. /**
  827. * add by wei_liu at 2007-02-3
  828. * 验证长度
  829. * arg1为验证的文档的id
  830. * arg2文档的最大长度
  831. * arg3为验证的文档名称
  832. * ***********************验证通过返回true
  833. */
  834. function maxLongById(arg1,arg2,arg3)
  835. //str.replace(/[^\x00-\xff]/g,"**").length
  836. {
  837. if(document.getElementById(arg1)){
  838. var str =document.getElementById(arg1).value;
  839. var mLength =str.replace(/[^\x00-\xff]/g,"**").length;
  840. if(mLength>arg2)
  841. {
  842. setMessage(arg3+'不能超过'+arg2+'个字符或'+(arg2/2)+'个汉字!');
  843. return false;
  844. }
  845. return true;
  846. }else{
  847. setMessage('你要验证的字段不存在或ID重复定义');
  848. return false;
  849. }
  850. }
  851. /**
  852. * add by wei_liu at 2007-02-3
  853. * 验证是否为空
  854. * arg1为验证的文档的value
  855. * arg2为验证的文档名称
  856. * aarg3文档的最大长度,可以不用验证,只需传递两个前个就可以
  857. * example funcion aa(){
  858. * if(!isNotNull('voteTitle',"标题",20)){return ;}
  859. * 其它操作other action
  860. * }
  861. * 也可以不用验证长度
  862. * example function aa(){
  863. * if(!isNotNull('voteTitle',"标题")){return ;}
  864. * }
  865. * ***********************验证通过返回true
  866. */
  867. function isNotNullValue(arg1,arg2,arg3)
  868. {
  869. if(trim(arg1) =='' || typeof(arg1)=='undefined')
  870. {
  871. setMessage('请填写'+arg2+'!');
  872. return false;
  873. }
  874. if(arg3 !='' && typeof(arg3)!='' && arg3 !=null &&arg3 != 'undefined')
  875. {
  876. if(!maxLongByValue(arg1,arg3,arg2)){return false;}
  877. }
  878. return true;
  879. }
  880. /**
  881. * add by wei_liu at 2007-02-3
  882. * 验证长度
  883. * val1为验证的文档的value
  884. * val2文档的最大长度
  885. * val3为验证的文档名称
  886. * ***********************验证通过返回true
  887. */
  888. function maxLongByValue(val1,val2,val3){
  889. var mLength = val1.replace(/[^\x00-\xff]/g,"**").length;
  890. if(mLength>val2)
  891. {
  892. setMessage(val3+'不能超过'+val2+'个字符或'+(val2/2)+'个汉字!');
  893. return false;
  894. }
  895. return true;
  896. }
  897. /**
  898. * added by hongpeng_dong 2008.3.11
  899. * 判断输入值是否是月份
  900. * param:validateMonth 要验证的值
  901. * 是true 否false
  902. */
  903. function isMonth(validateMonth){
  904. var pattern = new RegExp(/(^[0]{0,1}[1-9]$)|(^1[0-2]$)/);
  905. return pattern.test(validateMonth);
  906. }
  907. /**
  908. * added by hongpeng_dong 2008.3.11
  909. * 判断输入值是否是年份
  910. * param:validateYear 要验证的值
  911. * 是true 否false
  912. */
  913. function isYear(validateYear){
  914. var pattern = new RegExp(/^[1-9][0-9]{3}$/);
  915. return pattern.test(validateYear);
  916. }
  917. function checkIdCardNo(valueId){
  918. var obj = $("#"+valueId);//得到控件的Jquery对象
  919. var num = obj.val();//得到对象值
  920. var objType = obj.attr("type");
  921. if(num==null || num==""){
  922. return true;
  923. }
  924. num = num.toUpperCase();
  925. //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
  926. if (!(/(^\d{17}$)|(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))){
  927. return false;
  928. }
  929. //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
  930. //下面分别分析出生日期和校验位
  931. var len, re;
  932. len = num.length;
  933. if(len == 17){
  934. num = num = num.substr(0, 6) + num.substr(8, num.length - 8);
  935. len = num.length;
  936. }
  937. if (len == 15){
  938. re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
  939. var arrSplit = num.match(re);
  940. //检查生日日期是否正确
  941. var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
  942. var bGoodDay;
  943. bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
  944. if (!bGoodDay)
  945. {
  946. return false;
  947. }
  948. else
  949. {
  950. //将15位身份证转成18位
  951. //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
  952. var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
  953. var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
  954. var nTemp = 0, i;
  955. num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
  956. for(i = 0; i < 17; i ++)
  957. {
  958. nTemp += num.substr(i, 1) * arrInt[i];
  959. }
  960. num += arrCh[nTemp % 11];
  961. obj.val(num);
  962. return true;
  963. }
  964. }
  965. if (len == 18){
  966. re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
  967. var arrSplit = num.match(re);
  968. //检查生日日期是否正确
  969. var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
  970. var bGoodDay;
  971. bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
  972. if (!bGoodDay)
  973. {
  974. return false;
  975. }
  976. else
  977. {
  978. //检验18位身份证的校验码是否正确。
  979. //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
  980. var valnum;
  981. var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
  982. var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
  983. var nTemp = 0, i;
  984. for(i = 0; i < 17; i ++)
  985. {
  986. nTemp += num.substr(i, 1) * arrInt[i];
  987. }
  988. valnum = arrCh[nTemp % 11];
  989. if (valnum != num.substr(17, 1))
  990. {
  991. return false;
  992. }
  993. obj.val(num);
  994. return true;
  995. }
  996. }
  997. return false;
  998. }
  999. //mac地址正则表达式
  1000. function checkMac(str)
  1001. {
  1002. if(str == ""){
  1003. return true;}
  1004. //mac地址正则表达式
  1005. var reg_name=/[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}/;
  1006. if(!reg_name.test(str)){
  1007. alert("mac地址格式不正确!mac地址格式为00:24:21:19:BD:E4");
  1008. return false;
  1009. }
  1010. return true;
  1011. }
  1012. function compDate(a,b) {
  1013. var arr=a.split("-");
  1014. var starttime=new Date(arr[0],arr[1],arr[2]);
  1015. var starttimes=starttime.getTime();
  1016. var arrs=b.split("-");
  1017. var lktime=new Date(arrs[0],arrs[1],arrs[2]);
  1018. var lktimes=lktime.getTime();
  1019. if(starttimes>lktimes) {
  1020. return false;
  1021. } else
  1022. return true;
  1023. }