index.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. /**
  2. * 表单验证
  3. * 默认导出为验证类的实例:
  4. * 所以不要存在并行验证的情况
  5. * 如果需要并行验证
  6. * 请自行实例化验证类
  7. *
  8. * Validation().data($data).rules({
  9. * '字段名': {
  10. * title: '字段中文名称',
  11. * msg: '验证错误提示语【可选】',
  12. * rules: [
  13. * {
  14. * required: true,
  15. * msg: '该条规则验证错误提示语【可选】' // 注:优先级高于msg
  16. * }
  17. * ],
  18. * // 自定义验证【可选】
  19. * validator(value) {
  20. * return false // 验证通过
  21. * }
  22. * },
  23. * field1: {
  24. * title: '字段1',
  25. * msg: '字段1必须符合规则',
  26. * rules: [
  27. * { required: true, msg: '必填' },
  28. * { isIP: true, msg: '是否是正确的ip' },
  29. * { isURL: true, msg: '是否是正确的URL' },
  30. * { isPostcode: true, msg: '是否是正确的邮政编码' },
  31. * { isCellphone: true, msg: '是否是正确的手机号' },
  32. * { isfixedphone: true, msg: '是否是正确的固定电话' },
  33. * { isEmail: true, msg: '是否是正确的邮箱地址' },
  34. * { isAvaiableLength: {min: 0, max: 100}, msg: '字符串长度是否在某个范围' },
  35. * { isString: true, msg: '是否字符串' },
  36. * { isNumber: true, msg: '是否是数字' },
  37. * { isObj: true, msg: '是否是对象' },
  38. * { isArray: true, msg: '是否是数组' },
  39. * { isDate: true, msg: '是否是日期' },
  40. * { isBoolean: true, msg: '是否是boolean' },
  41. * { isFunction: true, msg: '是否是函数' },
  42. * { isNull: true, msg: '是否是null' },
  43. * { isUndefined: true, msg: '是否是undefined' },
  44. * { isCardID: true, msg: '是否是正确的身份证号' },
  45. * { isLetterOnly: true, msg: '只能是字母' },
  46. * { isNumberOnly: true, msg: '只能是数字' },
  47. * { isLetterOrNumberOnly: true, msg: '只能是数字字母' },
  48. * { min: true, msg: '不能小于' },
  49. * { max: true, msg: '不能大于' },
  50. * { range: true, msg: '在某个范围内' },
  51. * { regex: true, msg: '自定义验证函数' },
  52. * ],
  53. * validator: function(value) {
  54. * return false;// 验证通过
  55. * }
  56. * }
  57. *}).check();
  58. *
  59. */
  60. export class Verification {
  61. constructor() {
  62. // 初始化验证规则集合
  63. this._initValidators()
  64. // 验证类错误提示语
  65. this.lang = {
  66. _valida_required_: '不能为空',
  67. _valida_isIP: '不是一个正确的IP',
  68. _valida_isURL: '不是一个正确的URL',
  69. _valida_isPostcode: '不是一个正确的邮政编码',
  70. _valida_isCellphone: '不是一个正确的手机号',
  71. _valida_isfixedphone: '不是一个正确的座机号',
  72. _valida_isEmail: '不是一个正确邮箱地址',
  73. _valida_isAvaiableLength: '',
  74. _valida_isString: '',
  75. _valida_isNumber: '',
  76. _valida_isObj: '',
  77. _valida_isArray: '',
  78. _valida_isDate: '',
  79. _valida_isBoolean: '',
  80. _valida_isFunction: '',
  81. _valida_isNull: '',
  82. _valida_isUndefined: '',
  83. _valida_isCardID: '',
  84. _valida_isLetterOnly: '',
  85. _valida_isNumberOnly: '',
  86. _valida_isLetterOrNumberOnly: '',
  87. _valida_min: '',
  88. _valida_max: '',
  89. _valida_range: '',
  90. _valida_regex: ''
  91. }
  92. }
  93. /**
  94. * 初始化实例数据
  95. */
  96. _initData() {
  97. this.errorCount = 0
  98. this.errorList = {}
  99. }
  100. /**
  101. * 设置待验证的数据
  102. * @param {*} d 待验证的数据
  103. * @returns this用于链式调用
  104. */
  105. data(d = {}) {
  106. this._initData()
  107. this.waitCheckData = d
  108. return this
  109. }
  110. /**
  111. * 验证规则
  112. * @param {object} r 设置验证数据中每个字段使用的规则集合
  113. * @returns this用于链式调用
  114. */
  115. rules(r = {}) {
  116. this.waitUseRules = r
  117. return this
  118. }
  119. /**
  120. * 开始验证
  121. * @param {number} type 验证类型 1 - 只要遇到第一个不符合的就返回结果 ;2 - 验证全部字段,返回所有不符合规范的字段
  122. * @returns {(boolean|string|object)} 返回false验证成功,返回字符串(错误提示语)验证失败,返回对象(错误集合)验证失败
  123. */
  124. check(type = 1) {
  125. for (let field in this.waitUseRules) {
  126. const errMsg = this.checkFieldRule(
  127. this.waitCheckData[field], // 字段值 value
  128. this.waitUseRules[field], // 验证规则集合
  129. field // 字段名
  130. )
  131. if (errMsg) {
  132. if (type === 1) {
  133. return `${this.waitUseRules[field].title}: ${errMsg}`
  134. }
  135. }
  136. }
  137. if (this.errorCount === 0) {
  138. return false
  139. }
  140. return this._getError()
  141. }
  142. /**
  143. * 获取错误集合
  144. * @returns {object} 错误对象
  145. */
  146. _getError() {
  147. return this.errorList
  148. }
  149. /**
  150. * 设置错误
  151. * @param {*} title 字段中文提示
  152. * @param {*} field 字段名
  153. * @param {*} errMsg 错误提示语
  154. */
  155. _setEorror(title, field, errMsg) {
  156. if (!this.errorList[field]) {
  157. this.errorList[field] = {
  158. title: title,
  159. field: field,
  160. msg: errMsg
  161. }
  162. this.errorCount += 1
  163. } else {
  164. this.errorList[field].msg += ',' + errMsg
  165. }
  166. }
  167. /**
  168. * 验证某个指定字段的规则
  169. * @param {*} value 字段值
  170. * @param {*} waitUseRules 字段的验证规则集合
  171. * @param {string} field 字段名称
  172. * @returns {(boolean|string)} false:验证通过
  173. */
  174. checkFieldRule(value, waitUseRules, field) {
  175. let _rules = [] // 验证规则数组
  176. let errMsg = false
  177. if (waitUseRules.rules) {
  178. if (
  179. Object.prototype.toString.call(waitUseRules.rules).slice(8, -1) ===
  180. 'Array'
  181. ) {
  182. _rules = waitUseRules.rules
  183. } else {
  184. _rules = [waitUseRules.rules]
  185. }
  186. for (let i = 0, leng = _rules.length; i < leng; i++) {
  187. if (_rules[i]) {
  188. errMsg = this._doCheck(value, _rules[i], field)
  189. // _rules[i] = { isIP: true, msg: '是否是正确的ip111' }
  190. if (errMsg) {
  191. errMsg = _rules[i].msg || (waitUseRules.msg || errMsg)
  192. this._setEorror(waitUseRules.title, field, errMsg)
  193. break
  194. }
  195. }
  196. }
  197. }
  198. if (!errMsg) {
  199. // 自定义验证规则
  200. if (waitUseRules.validator) {
  201. errMsg = waitUseRules.validator.call(this, value)
  202. }
  203. if (errMsg) {
  204. this._setEorror(waitUseRules.title, field, errMsg)
  205. }
  206. }
  207. return errMsg
  208. }
  209. /**
  210. * 执行验证
  211. * @param {*} value 字段值
  212. * @param {*} rule 验证规则名称
  213. * @param {string} field 字段名
  214. * @returns {(boolean|string)} false:验证通过
  215. */
  216. _doCheck(value, rule, field) {
  217. let errMsg = false
  218. for (let method in rule) {
  219. // { isIP: true, msg: '是否是正确的ip111' }
  220. if (method !== 'msg') {
  221. // 判断方法是否存在
  222. if (this._methodIsEmpty(method)) {
  223. let args = rule[method] // 验证方法所需要的参数
  224. const _errMsg = this.validators[method](value, args)
  225. if (_errMsg) {
  226. errMsg = _errMsg
  227. break
  228. }
  229. }
  230. }
  231. }
  232. return errMsg
  233. }
  234. /**
  235. * 判断验证规则是否存在
  236. * @param {*} value 待验证方法名
  237. * @returns {boolean} true:存在;false:不存在
  238. */
  239. _methodIsEmpty(value) {
  240. if (this.validators[value]) {
  241. return true
  242. }
  243. return false
  244. }
  245. /**
  246. * 判断是否为空
  247. * @param {*} value
  248. */
  249. _isEmpty(value) {
  250. if (
  251. value === '' ||
  252. value === undefined ||
  253. value === null ||
  254. value === 'null' ||
  255. value === 'undefined'
  256. ) {
  257. return true
  258. }
  259. return false
  260. }
  261. /**
  262. * 初始化自带验证规则
  263. */
  264. _initValidators() {
  265. let that = this
  266. that.validators = {
  267. /**
  268. * 验证必填
  269. * @param {*} value
  270. * @param {*} args
  271. * @returns false:验证通过
  272. */
  273. required(value, args) {
  274. let res = false
  275. if (Object.prototype.toString.call(value).slice(8, -1) === 'String') {
  276. res = value.replace(/\s+/g, '').length > 0
  277. } else if (
  278. Object.prototype.toString.call(value).slice(8, -1) === 'Array'
  279. ) {
  280. // 只验证数组 类型
  281. res = value.length > 0
  282. } else if (!that._isEmpty(value)) {
  283. res = true
  284. }
  285. return !res ? that.lang['_form_valida_required_'] : false
  286. },
  287. /**
  288. *
  289. * @descrition:判断是否是合理的IP地址
  290. * @param:value->待验证的IP地址
  291. * @returns {(boolean|string)} false:验证通过
  292. *
  293. */
  294. isIP(value, args) {
  295. let res = false
  296. var pattern = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
  297. res = pattern.test(value)
  298. return !res ? that.lang['_valida_isIP'] : false
  299. },
  300. /**
  301. * @descrition:判断输入的参数是否是个合格的URL,由于url的灵活性和多样性,一下代码并不能测试所有的url都是合法的(PS:该正则无法通配所有的URL,请慎用)
  302. * @param:value->待判断的url参数
  303. * @returns {(boolean|string)} false:验证通过
  304. **/
  305. isURL(value, args) {
  306. let res = false
  307. var strRegex =
  308. '^((https|http|ftp|rtsp|mms)?://)' +
  309. "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" + // ftp的user@
  310. '(([0-9]{1,3}.){3}[0-9]{1,3}' + // IP形式的URL- 199.194.52.184
  311. '|' + // 允许IP和DOMAIN(域名)
  312. "([0-9a-z_!~*'()-]+.)*" + // 域名- www.
  313. '([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].' + // 二级域名
  314. '[a-z]{2,6})' + // first level domain- .com or .museum
  315. '(:[0-9]{1,4})?' + // 端口- :80
  316. '((/?)|' +
  317. "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"
  318. var pattern = new RegExp(strRegex)
  319. res = pattern.test(value)
  320. return !res ? that.lang['_valida_isIP'] : false
  321. },
  322. /**
  323. *
  324. * @descrition:判断输入的参数是否是国内合法的邮编地址(ps:国内不包含国外的邮编)
  325. * @link: http://www.youbianku.com/%E9%A6%96%E9%A1%B5
  326. * @param: value 为待验证的邮编号码
  327. * @returns {(boolean|string)} false:验证通过
  328. *
  329. */
  330. isPostcode(value, args) {
  331. let res = false
  332. var pattern = /^[0-8]\d{5}$/
  333. res = pattern.test(value)
  334. return !res ? that.lang['_valida_isPostcode'] : false
  335. },
  336. /**
  337. *
  338. * @descrition:判断输入的参数是否是个合格的手机号码,不能判断号码的有效性,有效性可以通过运营商确定。
  339. * @param:value ->待判断的手机号码
  340. * @returns {(boolean|string)} false:验证通过
  341. *
  342. */
  343. isCellphone(value, args) {
  344. let res = false
  345. /**
  346. *@descrition:手机号码段规则
  347. * 13段:130、131、132、133、134、135、136、137、138、139
  348. * 14段:140、141、142、143、144、145、146、147、148、149
  349. * 15段:150、151、152、153、154、155、156、157、158、159
  350. * 16段:160、161、162、163、164、165、166、167、168、169
  351. * 17段:170、171、172、173、174、175、176、177、178、179
  352. * 18段:180、181、182、183、184、185、186、187、188、189
  353. * 19段:190、191、192、193、194、195、196、197、198、199
  354. */
  355. var pattern = /^[1][3,4,5,6,7,8,9][0-9]\d{8}$/
  356. res = pattern.test(value)
  357. return !res ? that.lang['_valida_isCellphone'] : false
  358. },
  359. /**
  360. * @descrition:判断输入的参数是否是个合格的固定电话号码。
  361. * @param:value->待验证的固定电话号码。
  362. * @returns {(boolean|string)} false:验证通过
  363. *
  364. **/
  365. isfixedphone(value, args) {
  366. let res = false
  367. /**
  368. *
  369. * @desctition:规则->区号3-4位,号码7-8位,可以有分机号,分机号为3-4为,格式如下:"0775-85333333-123"
  370. *
  371. */
  372. var pattern = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
  373. res = pattern.test(value)
  374. return !res ? that.lang['_valida_isfixedphone'] : false
  375. },
  376. /**
  377. *
  378. * @descrition:判断输入的参数是否是个合格标准的邮箱,并不能判断是否有效,有效只能通过邮箱提供商确定。
  379. * @param:value ->待验证的参数。
  380. * @returns {(boolean|string)} false:验证通过
  381. *
  382. */
  383. isEmail(value, args) {
  384. let res = false
  385. /**
  386. * @descrition:邮箱规则
  387. * 1.邮箱以a-z、A-Z、0-9开头,最小长度为1.
  388. * 2.如果左侧部分包含-、_、.则这些特殊符号的前面必须包一位数字或字母。
  389. * 3.@符号是必填项
  390. * 4.右则部分可分为两部分,第一部分为邮件提供商域名地址,第二部分为域名后缀,现已知的最短为2位。最长的为6为。
  391. * 5.邮件提供商域可以包含特殊字符-、_、.
  392. */
  393. var pattern = /^([a-zA-Z0-9]+[-_.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[-_.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/
  394. res = pattern.test(value)
  395. return !res ? that.lang['_valida_isEmail'] : false
  396. },
  397. /**
  398. * 判断传入的参数的长度是否在给定的有效范围内
  399. * @param->value : 传入的参数,参数可以为任何类型。
  400. * @param {*} args 验证需要的参数
  401. * @returns {(boolean|string)} false:验证通过
  402. *
  403. */
  404. isAvaiableLength(value, args = { min: 0, max: 0 }) {
  405. let res = false
  406. if (that._isEmpty(value)) {
  407. res = false
  408. } else {
  409. if (value.length >= args.min && value.length <= args.max) {
  410. res = true
  411. }
  412. }
  413. return !res ? that.lang['_valida_isAvaiableLength'] : false
  414. },
  415. /**
  416. * 判断是否字符串
  417. * @param->value : 传入的参数,参数可以为任何类型。
  418. * @returns {(boolean|string)} false:验证通过
  419. */
  420. isString(value, args) {
  421. let res = false
  422. // 是否字符串
  423. if (Object.prototype.toString.call(value).slice(8, -1) === 'String') {
  424. res = true
  425. }
  426. return !res ? that.lang['_valida_isString'] : false
  427. },
  428. /**
  429. *
  430. * @descrition : 该函数的功能是判断转入的参数是否为数字类型。
  431. * @param->value : 传入的参数,参数可以为任何类型。
  432. * @returns {(boolean|string)} false:验证通过
  433. *
  434. */
  435. isNumber(value, args) {
  436. let res = false
  437. // 是否数字
  438. if (Object.prototype.toString.call(value).slice(8, -1) === 'Number') {
  439. res = true
  440. }
  441. return !res ? that.lang['_valida_isNumber'] : false
  442. },
  443. isObj(value, args) {
  444. // 是否对象
  445. let res = false
  446. if (Object.prototype.toString.call(value).slice(8, -1) === 'Object') {
  447. res = true
  448. }
  449. return !res ? that.lang['_valida_isObj'] : false
  450. },
  451. isArray(value, args) {
  452. // 是否数组
  453. let res = false
  454. if (Object.prototype.toString.call(value).slice(8, -1) === 'Array') {
  455. res = true
  456. }
  457. return !res ? that.lang['_valida_isArray'] : false
  458. },
  459. isDate(value, args) {
  460. // 是否时间
  461. let res = false
  462. if (Object.prototype.toString.call(value).slice(8, -1) === 'Date') {
  463. res = true
  464. }
  465. return !res ? that.lang['_valida_isDate'] : false
  466. },
  467. isBoolean(value, args) {
  468. // 是否boolean
  469. let res = false
  470. if (Object.prototype.toString.call(value).slice(8, -1) === 'Boolean') {
  471. res = true
  472. }
  473. return !res ? that.lang['_valida_isBoolean'] : false
  474. },
  475. isFunction(value, args) {
  476. // 是否函数
  477. let res = false
  478. if (Object.prototype.toString.call(value).slice(8, -1) === 'Function') {
  479. res = true
  480. }
  481. return !res ? that.lang['_valida_isFunction'] : false
  482. },
  483. isNull(value, args) {
  484. // 是否为null
  485. let res = false
  486. if (Object.prototype.toString.call(value).slice(8, -1) === 'Null') {
  487. res = true
  488. }
  489. return !res ? that.lang['_valida_isNull'] : false
  490. },
  491. isUndefined(value, args) {
  492. // 是否undefined
  493. let res = false
  494. if (
  495. Object.prototype.toString.call(value).slice(8, -1) === 'Undefined'
  496. ) {
  497. res = true
  498. }
  499. return !res ? that.lang['_valida_isUndefined'] : false
  500. },
  501. isCardID(value, args) {
  502. let res = true
  503. if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(value)) {
  504. res = false
  505. }
  506. // 身份证城市
  507. var aCity = {
  508. 11: '北京',
  509. 12: '天津',
  510. 13: '河北',
  511. 14: '山西',
  512. 15: '内蒙古',
  513. 21: '辽宁',
  514. 22: '吉林',
  515. 23: '黑龙江',
  516. 31: '上海',
  517. 32: '江苏',
  518. 33: '浙江',
  519. 34: '安徽',
  520. 35: '福建',
  521. 36: '江西',
  522. 37: '山东',
  523. 41: '河南',
  524. 42: '湖北',
  525. 43: '湖南',
  526. 44: '广东',
  527. 45: '广西',
  528. 46: '海南',
  529. 50: '重庆',
  530. 51: '四川',
  531. 52: '贵州',
  532. 53: '云南',
  533. 54: '西藏',
  534. 61: '陕西',
  535. 62: '甘肃',
  536. 63: '青海',
  537. 64: '宁夏',
  538. 65: '新疆',
  539. 71: '台湾',
  540. 81: '香港',
  541. 82: '澳门',
  542. 91: '国外'
  543. }
  544. if (!aCity[parseInt(value.substr(0, 2))]) {
  545. res = false
  546. }
  547. // 出生日期验证
  548. var sBirthday = (
  549. value.substr(6, 4) +
  550. '-' +
  551. Number(value.substr(10, 2)) +
  552. '-' +
  553. Number(value.substr(12, 2))
  554. ).replace(/-/g, '/')
  555. var d = new Date(sBirthday)
  556. if (
  557. sBirthday !==
  558. d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate()
  559. ) {
  560. res = false
  561. }
  562. // 身份证号码校验
  563. var sum = 0
  564. var weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  565. var codes = '10X98765432'
  566. for (var i = 0; i < value.length - 1; i++) {
  567. sum += value[i] * weights[i]
  568. }
  569. var last = codes[sum % 11] // 计算出来的最后一位身份证号码
  570. if (value[value.length - 1] !== last) {
  571. res = false
  572. }
  573. return !res ? that.lang['_valida_isCardID'] : false
  574. },
  575. // 验证只能是字母
  576. isLetterOnly(value) {
  577. let res = false
  578. var pattern = /^[a-zA-Z]*$/
  579. res = pattern.test(value)
  580. if (value === '') {
  581. res = true
  582. }
  583. return !res ? that.lang['_valida_isLetterOnly'] : false
  584. },
  585. // 验证只能为数字
  586. isNumberOnly(value) {
  587. let res = false
  588. var pattern = /^[0-9]+$/
  589. res = pattern.test(value)
  590. if (value === '') {
  591. res = true
  592. }
  593. return !res ? that.lang['_valida_isNumberOnly'] : false
  594. },
  595. // 验证只能是字母和数字
  596. isLetterOrNumberOnly(value) {
  597. let res = false
  598. var pattern = /^[0-9a-zA-Z]*$/
  599. res = pattern.test(value)
  600. if (value === '') {
  601. res = true
  602. }
  603. return !res ? that.lang['_valida_isLetterOrNumberOnly'] : false
  604. },
  605. // 最小值
  606. min(value, args) {
  607. var reg = /^[0-9]+$/
  608. if (value !== '' && !reg.test(value)) {
  609. return that.lang['_valida_min']
  610. }
  611. if (args.min !== '' && !reg.test(args.min)) {
  612. return that.lang['_valida_min']
  613. }
  614. if (parseFloat(value) < parseFloat(args.min)) {
  615. return that.lang['_valida_min']
  616. }
  617. return false
  618. },
  619. // 最大值
  620. max(value, args) {
  621. var reg = /^[0-9]+$/
  622. if (value !== '' && !reg.test(value)) {
  623. return that.lang['_valida_max']
  624. }
  625. if (args.max !== '' && !reg.test(args.max)) {
  626. return that.lang['_valida_max']
  627. }
  628. if (parseFloat(value) > parseFloat(args.max)) {
  629. return that.lang['_valida_max']
  630. }
  631. return false
  632. },
  633. // 某个范围
  634. range(value, args = { min: 0, max: 0 }) {
  635. var reg = /^[0-9]+$/
  636. if (value !== '' && !reg.test(value)) {
  637. return that.lang['_valida_range']
  638. }
  639. if (args.max !== '' && !reg.test(args.max)) {
  640. return that.lang['_valida_range']
  641. }
  642. if (args.min !== '' && !reg.test(args.min)) {
  643. return that.lang['_valida_range']
  644. }
  645. if (
  646. parseFloat(args.min) > parseFloat(value) ||
  647. parseFloat(value) > parseFloat(args.max)
  648. ) {
  649. return that.lang['_valida_range']
  650. }
  651. return false
  652. },
  653. regex(value, reg) {
  654. let res = false
  655. if (reg && !reg.test(value)) {
  656. res = reg.test(value)
  657. }
  658. return !res ? that.lang['_valida_regex'] : false
  659. }
  660. }
  661. }
  662. }