RoadFlow2.1 临时演示

roadui.validate.js 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. //验证
  2. ; RoadUI.Validate = function ()
  3. {
  4. var instance = this;
  5. this.bind = function ($elements)
  6. {
  7. return;
  8. /*
  9. if (!$elements || $elements.size() == 0)
  10. {
  11. return;
  12. }
  13. $elements.each(function ()
  14. {
  15. var $this = $(this);
  16. var type = $this.attr("type") || "text";
  17. if ((typeof type) == "string" && !type.isNullOrEmpty())
  18. {
  19. if (type.toLowerCase() == "radio" || type.toLowerCase() == "checkbox")
  20. {
  21. $this.bind("change", function () { instance.validateElement($this); });
  22. }
  23. else
  24. {
  25. $this.bind("blur", function () { instance.validateElement($this); });
  26. }
  27. }
  28. });
  29. */
  30. };
  31. this.unbind = function ()
  32. {
  33. $("[validate]").each(function ()
  34. {
  35. var $this = $(this);
  36. var type = $this.attr("type");
  37. if ((typeof type) == "string" && !type.isNullOrEmpty())
  38. {
  39. if (type.toLowerCase() == "radio" || type.toLowerCase() == "checkbox")
  40. {
  41. $this.unbind("change");
  42. }
  43. else
  44. {
  45. $this.unbind("blur");
  46. }
  47. }
  48. });
  49. };
  50. // form1 要验证的form,对象或id promptType提示方式 0:window.alert 1:输入框后面提示 2:输入框后面提示后显示图标,不显示文字
  51. this.validateForm = function (form1, promptType)
  52. {
  53. var $f;
  54. if ((typeof form1) == 'string')
  55. {
  56. $f = $("#" + $.trim(form1));
  57. }
  58. else
  59. {
  60. $f = $(form1);
  61. }
  62. if (!$f || $f.size() == 0)
  63. {
  64. return;
  65. }
  66. var flag = true;
  67. $("[validate]", $f).each(function ()
  68. {
  69. var flag1 = instance.validateElement($(this), promptType);
  70. if (!flag1 && promptType == 0)
  71. {
  72. flag = false;
  73. return false;
  74. }
  75. if (flag && !flag1)
  76. {
  77. flag = flag1;
  78. }
  79. });
  80. var e = arguments.callee.caller.arguments[0] || window.event;
  81. if (flag && e && e.srcElement != null)
  82. {
  83. var $submits = $("input[type='submit']", $f);
  84. $submits.prop("disabled", true);
  85. var eventElement = e.srcElement;
  86. if (eventElement)
  87. {
  88. $submits.each(function ()
  89. {
  90. if ($(this).get(0) === e.srcElement)
  91. {
  92. $f.append('<input type="hidden" name="' + $(this).attr("name") + '" value="' + $(this).val() + '" />');
  93. }
  94. });
  95. if ("INPUT" == e.srcElement.tagName)
  96. {
  97. $f.submit();
  98. }
  99. }
  100. }
  101. return flag;
  102. };
  103. this.validateElement = function ($element, promptType)
  104. {
  105. if (!$element)
  106. {
  107. return false;
  108. }
  109. var $ele = $($element);
  110. if (!$ele || $ele.size() == 0)
  111. {
  112. return false;
  113. }
  114. var validateType = $ele.attr("validate");
  115. if (validateType.isNullOrEmpty())
  116. {
  117. return false;
  118. }
  119. var validateArray = validateType.split(',');
  120. if (validateArray.length > 1)
  121. {
  122. var cannullFlag = false;
  123. var arrIndex = null;
  124. for (var j = 0; j < validateArray.length; j++)
  125. {
  126. if (validateArray[j].toLowerCase() == "canempty" || validateArray[j].toLowerCase() == "cannull")
  127. {
  128. cannullFlag = true;
  129. arrIndex = j;
  130. }
  131. }
  132. if (cannullFlag)
  133. {
  134. if (!isNaN(arrIndex))
  135. {
  136. validateArray.splice(arrIndex, 1);
  137. }
  138. var errmsg = "";
  139. var vflag = $ele.val() == null || $ele.val() == undefined || $.trim($ele.val()).length == 0;
  140. this.validateCompleted($ele, validateFlag1, promptType, errmsg, false);
  141. if (vflag)
  142. {
  143. return true;
  144. }
  145. }
  146. }
  147. for (var i = 0; i < validateArray.length; i++)
  148. {
  149. if ($.trim(validateArray[i].toString()).length == 0)
  150. {
  151. continue;
  152. }
  153. var validateFlag1 = true;
  154. switch (validateArray[i].toString().trim().toLowerCase())
  155. {
  156. case "notnull":
  157. case "notempty":
  158. case "null":
  159. case "empty":
  160. var type1 = $ele.attr("type1");
  161. var errmsg = $ele.attr("errmsg") || "不能为空";
  162. validateFlag1 = this.isNotEmpty($ele.val());
  163. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  164. break;
  165. case "int":
  166. case "integer":
  167. var errmsg = $ele.attr("errmsg") || "只能是整数";
  168. validateFlag1 = this.isInt($ele.val());
  169. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  170. break;
  171. case "positiveint":
  172. var errmsg = $ele.attr("errmsg") || "只能是正整数";
  173. validateFlag1 = this.isPositiveInt($ele.val());
  174. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  175. break;
  176. case "negativeint":
  177. var errmsg = $ele.attr("errmsg") || "只能是负整数";
  178. validateFlag1 = this.isNegativeInt($ele.val());
  179. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  180. break;
  181. case "decimal":
  182. case "numeric":
  183. case "float":
  184. case "double":
  185. var errmsg = $ele.attr("errmsg") || "只能是有效数字";
  186. validateFlag1 = this.isDigital($ele.val());
  187. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  188. break;
  189. case "positivefloat":
  190. var errmsg = $ele.attr("errmsg") || "只能是正实数";
  191. validateFlag1 = this.isPositiveFloat($ele.val());
  192. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  193. break;
  194. case "negativefloat":
  195. var errmsg = $ele.attr("errmsg") || "只能是负实数";
  196. validateFlag1 = this.isNegativeFloat($ele.val());
  197. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  198. break;
  199. case "chinese":
  200. var errmsg = $ele.attr("errmsg") || "只能是汉字";
  201. validateFlag1 = this.isChinese($ele.val());
  202. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  203. break;
  204. case "mail":
  205. case "email":
  206. var errmsg = $ele.attr("errmsg") || "邮箱格式错误";
  207. validateFlag1 = this.isEmail($ele.val());
  208. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  209. break;
  210. case "phone":
  211. case "mobile":
  212. case "phonenumber":
  213. case "mobilenumber":
  214. var errmsg = $ele.attr("errmsg") || "手机号码错误";
  215. validateFlag1 = this.isPhoneNumber($ele.val());
  216. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  217. break;
  218. case "ip":
  219. var errmsg = $ele.attr("errmsg") || "IP地址格式错误";
  220. validateFlag1 = this.isIp($ele.val());
  221. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  222. break;
  223. case "datetime":
  224. var errmsg = $ele.attr("errmsg") || "日期时间格式错误";
  225. validateFlag1 = this.isDateTime($ele.val());
  226. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  227. break;
  228. case "let":
  229. var let = $ele.attr("validate_let") || "0";
  230. let = parseInt(let);
  231. if (!let) let = 0;
  232. var errmsg = $ele.attr("errmsg") || "不能小于" + let + "个字符";
  233. validateFlag1 = this.isLet($ele.val(), let);
  234. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  235. break;
  236. case "get":
  237. var get = $ele.attr("validate_get") || "0";
  238. get = parseInt(get);
  239. if (!get) get = 0;
  240. var errmsg = $ele.attr("errmsg") || "不能大于" + get + "个字符";
  241. validateFlag1 = this.isGet($ele.val(), get);
  242. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  243. break;
  244. case "ajax":
  245. var url = $ele.attr("validate_url");
  246. var validateResult = this.isAjax($ele.val(), url);
  247. validateFlag1 = validateResult[0];
  248. var errmsg = $ele.attr("errmsg") || validateResult[1];
  249. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  250. break;
  251. case "equal":
  252. var equalid = $ele.attr("validate_equalfor");
  253. var $equalobj = $("#" + equalid.trim());
  254. var val = $equalobj != null && $equalobj.size() > 0 ? $equalobj.val() : "";
  255. validateFlag1 = this.isEqual($ele.val(), val);
  256. var errmsg = $ele.attr("errmsg") || "验证错误";
  257. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  258. break;
  259. case "checkbox":
  260. var errmsg = $ele.attr("errmsg") || "至少选择一项";
  261. validateFlag1 = this.validateCheclbox($ele);
  262. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  263. break;
  264. case "radio":
  265. var errmsg = $ele.attr("errmsg") || "必须选择一项";
  266. validateFlag1 = this.validateRadio($ele);
  267. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  268. break;
  269. case "editor":
  270. var errmsg = $ele.attr("errmsg") || "不能为空";
  271. validateFlag1 = UE.getEditor($element.attr("id")).hasContents();
  272. //validateFlag1 = $.trim(html).length > 0;
  273. this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
  274. break;
  275. }
  276. if (!validateFlag1)
  277. {
  278. return false;
  279. }
  280. }
  281. return true;
  282. };
  283. this.validateCompleted = function ($element, isSuccess, promptType, errMessage, showInfo)
  284. {
  285. if (promptType == undefined)
  286. {
  287. promptType = 1;
  288. }
  289. switch (promptType)
  290. {
  291. case 0:
  292. if (!isSuccess)
  293. {
  294. window.alert(errMessage);
  295. try { $element.focus(); } catch (e) { }
  296. }
  297. break;
  298. case 1:
  299. case 2:
  300. var $span = $element.nextAll(".validate,.validate1,.validate2");
  301. if ($span.size() > 0)
  302. {
  303. $span.first()
  304. }
  305. else
  306. {
  307. $span = $('<span class="validate"></span>');
  308. $element.parent().append($span);
  309. }
  310. if (promptType == 1)
  311. {
  312. $span.text(isSuccess ? "" : errMessage);
  313. if (showInfo)
  314. {
  315. //如果验证成功则不显示任何信息,如果要显示则将 validate改为validate1
  316. $span.removeClass().addClass(isSuccess ? "validate" : promptType == 1 ? "validate2" : "validate3");
  317. }
  318. else
  319. {
  320. $span.removeClass().addClass("validate");
  321. }
  322. }
  323. else
  324. {
  325. if (!isSuccess)
  326. {
  327. $span.text("").attr("title", errMessage);;
  328. $span.removeClass("").addClass("validate3");
  329. }
  330. else
  331. {
  332. $span.removeClass("").addClass("validate").remove();
  333. }
  334. }
  335. break;
  336. }
  337. };
  338. this.isNotEmpty = function (val)
  339. {
  340. return val != null && val != undefined && $.trim(val.toString()).length > 0;
  341. };
  342. this.isDigital = function (val)
  343. {
  344. return this.isInt(val) || this.isFloat(val);
  345. };
  346. this.isInt = function (val)
  347. {
  348. var reg = /^(-|\+)?\d+$/;
  349. return reg.test(val);
  350. };
  351. this.isPositiveInt = function (val)
  352. {
  353. return this.isInt(val) && parseInt(val) >= 0;
  354. };
  355. this.isNegativeInt = function (val)
  356. {
  357. return this.isInt(val) && parseInt(val) < 0;
  358. };
  359. this.isFloat = function (val)
  360. {
  361. var reg = new RegExp("^[0-9]*\.[0-9]+$");
  362. return reg.exec(val) && this.isInt($.trim(val).substring(0, 1));
  363. };
  364. this.isPositiveFloat = function (val)
  365. {
  366. return (this.isFloat(val) || this.isInt(val)) && parseFloat(val) >= 0;
  367. };
  368. this.isNegativeFloat = function (val)
  369. {
  370. return (this.isFloat(val) || this.isInt(val)) && parseFloat(val) < 0;
  371. };
  372. this.isChinese = function (val)//是否为中文
  373. {
  374. var reg = /^[\u0391-\uFFE5]+$/;
  375. return reg.test(val);
  376. };
  377. this.isEmail = function (val)//是否为email
  378. {
  379. var reg = /^[-_A-Za-z0-9\.]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/;
  380. return reg.test(val);
  381. };
  382. this.isIp = function (val)//是否为IP
  383. {
  384. var check = function (v) { try { return (v <= 255 && v >= 0); } catch (x) { return false; } }
  385. var re = val.split("."); return (re.length == 4) ? (check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])) : false;
  386. };
  387. this.isPhoneNumber = function (val)//是否为手机号码
  388. {
  389. return /^13\d{9}$/g.test(val) || (/^15[0-35-9]\d{8}$/g.test(val)) || (/^18[00-9]\d{8}$/g.test(val))
  390. };
  391. this.isDateTime = function (val)
  392. {
  393. return true;
  394. };
  395. this.isAjax = function (val, url)
  396. {
  397. var txt = "";
  398. $.ajax({ url: url, async: false, type: "POST", data: { "value": val }, cache: false, complete: function (response)
  399. {
  400. txt = $.trim(response.responseText);
  401. }
  402. });
  403. return ["1" == txt || "true" == txt, txt];
  404. };
  405. this.isLet = function (val, let)
  406. {
  407. if (!this.isNotEmpty(val) || !this.isInt(let))
  408. {
  409. return false;
  410. }
  411. return $.trim(val).length >= parseInt(let);
  412. };
  413. this.isGet = function (val, get)
  414. {
  415. if (!this.isNotEmpty(val) || !this.isInt(get))
  416. {
  417. return true;
  418. }
  419. return $.trim(val).length <= parseInt(get);
  420. };
  421. this.isEqual = function (val, val1)
  422. {
  423. return val === val1;
  424. };
  425. this.validateCheclbox = function ($e)
  426. {
  427. var name = $e.attr('name');
  428. return $(":checkbox:checked[name='" + $.trim(name) + "']").size() > 0;
  429. };
  430. this.validateRadio = function ($e)
  431. {
  432. var name = $e.attr('name'); var flag = true;
  433. return $(":radio:checked[name='" + $.trim(name) + "']").size() > 0;
  434. };
  435. }