newValidate.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. /*
  2. * @Author: chenlong (陈龙)
  3. * @Date: 2019-10-24 18:11:07
  4. * @LastEditors: zwy
  5. * @LastEditTime: 2021-05-27 09:12:30
  6. * @Description: 表单校验方法
  7. */
  8. /* eslint-disable */
  9. const regExps = {
  10. carNumber: {
  11. // 车牌校验
  12. regExp: /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1,2}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/,
  13. msg: '车牌格式有误'
  14. },
  15. domainName: {
  16. // 域名校验
  17. regExp: /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/,
  18. msg: '域名格式有误'
  19. },
  20. int: {
  21. // 包含0的正整数校验
  22. regExp: /^([1-9]\d*|0{1})$/,
  23. msg: '该项为正整数'
  24. },
  25. price: {
  26. // 最多4位小数的价格校验
  27. regExp: /^(0{1}|[1-9]\d*)(?:\.\d{1,4})?$/,
  28. msg: '价格格式有误,最多保留4位小数'
  29. },
  30. phone: {
  31. // 手机号校验
  32. regExp: /^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|147)\d{8}$/,
  33. msg: '手机号码格式有误'
  34. },
  35. email: {
  36. // 邮箱校验
  37. regExp: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
  38. msg: '邮箱地址格式有误'
  39. },
  40. tel: {
  41. // 联系电话校验
  42. regExp: /^((0\d{2,3}-\d{7,8})|((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|147)\d{8})$/,
  43. msg: '联系电话格式有误'
  44. },
  45. card: {
  46. // 身份证校验
  47. regExp: /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/,
  48. msg: '身份证格式有误'
  49. },
  50. passport: {
  51. // 护照
  52. regExp: /^[a-zA-Z0-9]{3,21}$/,
  53. msg: '护照格式有误'
  54. },
  55. officer: {
  56. // 军官证或士兵证
  57. regExp: /^[a-zA-Z0-9]{7,21}$/,
  58. msg: '军官证格式有误'
  59. },
  60. hours: {
  61. // 时分校验
  62. regExp: /^(([0,1]\d{1})|2[0,1,2,3]{1}|\d{1}):[0,1,2,3,4,5]\d{1}$/,
  63. msg: '时分输入格式有误'
  64. },
  65. hoursNocolon: {
  66. // 不带冒号时分校验
  67. regExp: /^(([0,1]\d{1})|2[0,1,2,3]{1}|\d{1})[0,1,2,3,4,5]\d{1}$/,
  68. msg: '请输入不带冒号的时分格式'
  69. },
  70. percentage: {
  71. // 百分数验证
  72. regExp: /^\d+\%$/,
  73. msg: '请输入百分数'
  74. },
  75. legalString: {
  76. // 中文、英文字母、数字、下划线和中划线
  77. regExp: /^[\u4E00-\u9FA5A-Za-z0-9_-]+$/,
  78. msg: '由中文、英文字母、数字、下划线和中划线组成'
  79. }
  80. };
  81. export default {
  82. getSetting() {
  83. return {
  84. message: '该项不能为空.',
  85. required: true,
  86. trigger: 'blur',
  87. validator() {}
  88. };
  89. },
  90. // 为空校验
  91. null(value) {
  92. let regExp = /^\s*$/g;
  93. if (regExp.test(value) || 'undefined' == typeof value || null == value) {
  94. return '该项不能为空';
  95. }
  96. },
  97. // 车牌校验
  98. carNumber(value) {
  99. let regExp =
  100. /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1,2}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
  101. return !regExp.test(value) && '车牌格式有误';
  102. },
  103. // 域名校验
  104. domainName(value) {
  105. let regExp = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/;
  106. return !regExp.test(value) && '域名格式有误';
  107. },
  108. // 包含0的正整数校验
  109. int(value) {
  110. let regExp = /^([1-9]\d*|0{1})$/;
  111. return !regExp.test(value) && '该项为正整数';
  112. },
  113. // 最多4位小数的价格校验
  114. price(value) {
  115. let regExp = /^(0{1}|[1-9]\d*)(?:\.\d{1,4})?$/;
  116. return !regExp.test(value) && '价格格式有误,最多保留4位小数';
  117. },
  118. // 手机号校验
  119. phone(value) {
  120. let regExp = /^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|147)\d{8}$/;
  121. return !regExp.test(value) && '您输入格式有误,请重新输入';
  122. },
  123. // 联系电话校验
  124. tel(value) {
  125. let regExp = /^((0\d{2,3}-\d{7,8})|((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|147)\d{8})$/;
  126. return !regExp.test(value) && '联系电话格式有误';
  127. },
  128. // 身份证校验
  129. card(value) {
  130. let regExp = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/;
  131. return !regExp.test(value) && '身份证格式有误';
  132. },
  133. // 时分校验
  134. hours(value) {
  135. let regExp = /^(([0,1]\d{1})|2[0,1,2,3]{1}|\d{1}):[0,1,2,3,4,5]\d{1}$/;
  136. return !regExp.test(value) && '时分输入格式有误';
  137. },
  138. // 不带冒号时分校验
  139. hoursNocolon(value) {
  140. let regExp = /^(([0,1]\d{1})|2[0,1,2,3]{1}|\d{1})[0,1,2,3,4,5]\d{1}$/;
  141. return !regExp.test(value) && '请输入不带冒号的时分格式';
  142. },
  143. // 百分数验证
  144. percentage(value) {
  145. let regExp = /^\d+\%$/;
  146. return !regExp.test(value) && '请输入百分数';
  147. },
  148. legalString(value) {
  149. const regExp = /^[\u4E00-\u9FA5A-Za-z0-9_-]+$/;
  150. return !regExp.test(value) && '由中文、英文字母、数字、下划线和中划线组成';
  151. },
  152. /*
  153. 初始化校验
  154. arg为需要校验项的数组集合,需要优先校验项放在最后
  155. */
  156. init(arg) {
  157. let set = this.getSetting();
  158. set.validator = (rule, value, callback) => {
  159. let i = arg.length,
  160. err;
  161. while (i--) {
  162. err = this[arg[i]](value);
  163. if (err) break;
  164. }
  165. if (err) {
  166. rule.message = err;
  167. callback(new Error(''));
  168. } else {
  169. callback();
  170. }
  171. };
  172. return [Object.assign({}, set)];
  173. },
  174. /*
  175. 为必填校验
  176. */
  177. noRequired(arg) {
  178. let set = this.getSetting();
  179. set.required = false;
  180. set.validator = (rule, value, callback) => {
  181. if (value) {
  182. let i = arg.length,
  183. err;
  184. while (i--) {
  185. err = this[arg[i]](value);
  186. if (err) break;
  187. }
  188. if (err) {
  189. rule.message = err;
  190. callback(new Error(''));
  191. } else {
  192. callback();
  193. }
  194. } else {
  195. callback();
  196. }
  197. };
  198. return [Object.assign({}, set)];
  199. },
  200. // 自定义校验
  201. custome(params) {
  202. return [Object.assign({}, this.getSetting(), params)];
  203. },
  204. /*
  205. 正则校验
  206. reg正则表达式
  207. msg提示消息
  208. required是否为必填,不传为不必填,传值则根据required的Boolean值来确定
  209. */
  210. reg(reg, msg, required) {
  211. let self = this;
  212. return [
  213. Object.assign({}, this.getSetting(), {
  214. required: Boolean(required),
  215. message: msg,
  216. validator(rule, value, callback) {
  217. if (rule.required) {
  218. if (self.null(value)) {
  219. callback(new Error(''));
  220. } else {
  221. if (reg.test(value)) {
  222. callback();
  223. } else {
  224. callback(new Error(''));
  225. }
  226. }
  227. } else {
  228. if (self.null(value)) {
  229. callback();
  230. } else {
  231. if (reg.test(value)) {
  232. callback();
  233. } else {
  234. callback(new Error(''));
  235. }
  236. }
  237. }
  238. }
  239. })
  240. ];
  241. },
  242. // 1以上的正整数
  243. cameraChannel(required = true) {
  244. let pattern = /^[1-9]/,
  245. message = '请输入除了0的数字';
  246. return { required, pattern, message, trigger: 'blur' };
  247. },
  248. //数字、大小写字母和下划线(50位以内)
  249. limitVideoNumber(required = true) {
  250. let pattern = /^\w{0,50}$/,
  251. message = '不能超过50位';
  252. return { required, pattern, message, trigger: 'blur' };
  253. },
  254. //限制50位以内
  255. limitVideo(required = true) {
  256. let pattern = /^.{1,50}$/,
  257. message = '不能超过50位';
  258. return { required, pattern, message, trigger: 'blur' };
  259. },
  260. //数字、大小写字母和下划线(20位以内)
  261. limitVideoNumber20(required = true) {
  262. let pattern = /^([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9_()()]){1,20}$/,
  263. message = '不能超过20位';
  264. return { required, pattern, message, trigger: 'blur' };
  265. },
  266. /**
  267. * @description: 输入框校验
  268. * @param {String}: name: 名称:label
  269. * @return {Object}: Object
  270. * @author: chenlong (陈龙)
  271. */
  272. inputRequired(name = '名称') {
  273. return { required: true, message: `请输入${name}`, trigger: 'blur' };
  274. },
  275. //匹配版本号*.*.*
  276. versionRegular(required = true) {
  277. let pattern = /^([1-9]\d+|[1-9])(\.([1-9]\d+|\d)){2}$/,
  278. message = '请输入除了0开头x.x.x的格式';
  279. return { pattern, message, trigger: 'blur' };
  280. },
  281. /**
  282. * @description: 选择框校验
  283. * @param {String}: name: 名称:label
  284. * @param {String}: msg: 自定义提示
  285. * @return {Object}: Object
  286. * @author: chenlong (陈龙)
  287. */
  288. selectRequired(name = '名称', msg) {
  289. return { required: true, message: msg || `请选择${name}`, trigger: 'change' };
  290. },
  291. /**
  292. * @description: 正则表达式
  293. * @param {RegExp || String}: reg 正则表达式 | regExps里面的正则类型
  294. * @param {String}: msg 校验错误提示
  295. * @return {Object}: Object
  296. * @author: chenlong (陈龙)
  297. */
  298. pattern(reg, msg) {
  299. let pattern = /^[\u4E00-\u9FA5A-Za-z0-9_-]+$/,
  300. message = '由中文、英文字母、数字、下划线和中划线组成';
  301. if (reg instanceof RegExp) {
  302. pattern = reg;
  303. message = msg || '您输入格式有误,请重新输入';
  304. } else if (typeof reg == 'string' && regExps[reg]) {
  305. pattern = regExps[reg] && regExps[reg].regExp;
  306. message = msg || '您输入格式有误,请重新输入' || (regExps[reg] && regExps[reg].msg);
  307. }
  308. return { pattern, message, trigger: 'blur' };
  309. },
  310. /**
  311. * @description: 选择框校验
  312. * @param {Number}: min: 最小长度
  313. * @param {Number}: max: 最大长度
  314. * @return {Object}: Object
  315. * @author: chenlong (陈龙)
  316. */
  317. lengthRange(min = 2, max = 50, required = true) {
  318. return { required, min, max, message: `长度在 ${min} 到 ${max} 个字符`, trigger: 'blur' };
  319. },
  320. // 自定义校验
  321. custome(params) {
  322. return [Object.assign({}, this.getSetting(), params)];
  323. },
  324. // 手机号校验
  325. patternPhone(required = true) {
  326. let pattern = /^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|147|191)\d{8}$/,
  327. message = '您输入的手机号有误';
  328. return { required, pattern, message, trigger: 'blur' };
  329. },
  330. // 手机号校验
  331. patternPhoneNumber(required = true) {
  332. let pattern = /^(1[3|4|5|6|7|8|9])\d{9}$|^0\d{2,3}-?\d{6,8}$/,
  333. // let pattern = /(0\d{2,3}-\d{7,8})|(1[3-9]\d{9})/,
  334. message = '您输入的手机号有误';
  335. return { required, pattern, message, trigger: 'blur' };
  336. }
  337. };