test.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. /**
  2. * 验证电子邮箱格式
  3. */
  4. function email(value) {
  5. return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value)
  6. }
  7. /**
  8. * 验证手机格式
  9. */
  10. function mobile(value) {
  11. return /^1[23456789]\d{9}$/.test(value)
  12. }
  13. /**
  14. * 验证URL格式
  15. */
  16. function url(value) {
  17. return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/
  18. .test(value)
  19. }
  20. /**
  21. * 验证日期格式
  22. */
  23. function date(value) {
  24. if (!value) return false
  25. // 判断是否数值或者字符串数值(意味着为时间戳),转为数值,否则new Date无法识别字符串时间戳
  26. if (number(value)) value = +value
  27. return !/Invalid|NaN/.test(new Date(value).toString())
  28. }
  29. /**
  30. * 验证ISO类型的日期格式
  31. */
  32. function dateISO(value) {
  33. return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)
  34. }
  35. /**
  36. * 验证十进制数字
  37. */
  38. function number(value) {
  39. return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value)
  40. }
  41. /**
  42. * 验证字符串
  43. */
  44. function string(value) {
  45. return typeof value === 'string'
  46. }
  47. /**
  48. * 验证整数
  49. */
  50. function digits(value) {
  51. return /^\d+$/.test(value)
  52. }
  53. /**
  54. * 验证身份证号码
  55. */
  56. function idCard(value) {
  57. return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(
  58. value
  59. )
  60. }
  61. /**
  62. * 是否车牌号
  63. */
  64. function carNo(value) {
  65. // 新能源车牌
  66. const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/
  67. // 旧车牌
  68. const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
  69. if (value.length === 7) {
  70. return creg.test(value)
  71. } if (value.length === 8) {
  72. return xreg.test(value)
  73. }
  74. return false
  75. }
  76. /**
  77. * 金额,只允许2位小数
  78. */
  79. function amount(value) {
  80. // 金额,只允许保留两位小数
  81. return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value)
  82. }
  83. /**
  84. * 中文
  85. */
  86. function chinese(value) {
  87. const reg = /^[\u4e00-\u9fa5]+$/gi
  88. return reg.test(value)
  89. }
  90. /**
  91. * 只能输入字母
  92. */
  93. function letter(value) {
  94. return /^[a-zA-Z]*$/.test(value)
  95. }
  96. /**
  97. * 只能是字母或者数字
  98. */
  99. function enOrNum(value) {
  100. // 英文或者数字
  101. const reg = /^[0-9a-zA-Z]*$/g
  102. return reg.test(value)
  103. }
  104. /**
  105. * 验证是否包含某个值
  106. */
  107. function contains(value, param) {
  108. return value.indexOf(param) >= 0
  109. }
  110. /**
  111. * 验证一个值范围[min, max]
  112. */
  113. function range(value, param) {
  114. return value >= param[0] && value <= param[1]
  115. }
  116. /**
  117. * 验证一个长度范围[min, max]
  118. */
  119. function rangeLength(value, param) {
  120. let check = value.length >= param[0] && value.length <= param[1]
  121. //如果value长度小于min个或max 返回true (不符合条件)
  122. //符合条件返回false
  123. return !check
  124. }
  125. /**
  126. * 是否固定电话
  127. */
  128. function landline(value) {
  129. const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
  130. return reg.test(value)
  131. }
  132. /**
  133. * 判断是否为空
  134. */
  135. function empty(value) {
  136. switch (typeof value) {
  137. case 'undefined':
  138. return true
  139. case 'string':
  140. if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true
  141. break
  142. case 'boolean':
  143. if (!value) return true
  144. break
  145. case 'number':
  146. if (value === 0 || isNaN(value)) return true
  147. break
  148. case 'object':
  149. if (value === null || value.length === 0) return true
  150. for (const i in value) {
  151. return false
  152. }
  153. return true
  154. }
  155. return false
  156. }
  157. /**
  158. * 是否json字符串
  159. */
  160. function jsonString(value) {
  161. if (typeof value === 'string') {
  162. try {
  163. const obj = JSON.parse(value)
  164. if (typeof obj === 'object' && obj) {
  165. return true
  166. }
  167. return false
  168. } catch (e) {
  169. return false
  170. }
  171. }
  172. return false
  173. }
  174. /**
  175. * 是否数组
  176. */
  177. function array(value) {
  178. if (typeof Array.isArray === 'function') {
  179. return Array.isArray(value)
  180. }
  181. return Object.prototype.toString.call(value) === '[object Array]'
  182. }
  183. /**
  184. * 是否对象
  185. */
  186. function object(value) {
  187. return Object.prototype.toString.call(value) === '[object Object]'
  188. }
  189. /**
  190. * 是否短信验证码
  191. */
  192. function code(value, len = 6) {
  193. return new RegExp(`^\\d{${len}}$`).test(value)
  194. }
  195. /**
  196. * 是否函数方法
  197. * @param {Object} value
  198. */
  199. function func(value) {
  200. return typeof value === 'function'
  201. }
  202. /**
  203. * 是否promise对象
  204. * @param {Object} value
  205. */
  206. function promise(value) {
  207. return object(value) && func(value.then) && func(value.catch)
  208. }
  209. /** 是否图片格式
  210. * @param {Object} value
  211. */
  212. function image(value) {
  213. const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i
  214. return IMAGE_REGEXP.test(value)
  215. }
  216. /**
  217. * 是否视频格式
  218. * @param {Object} value
  219. */
  220. function video(value) {
  221. const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv)/i
  222. return VIDEO_REGEXP.test(value)
  223. }
  224. /**
  225. * 是否为正则对象
  226. * @param {Object}
  227. * @return {Boolean}
  228. */
  229. function regExp(o) {
  230. return o && Object.prototype.toString.call(o) === '[object RegExp]'
  231. }
  232. export default {
  233. email,
  234. mobile,
  235. url,
  236. date,
  237. dateISO,
  238. number,
  239. digits,
  240. idCard,
  241. carNo,
  242. amount,
  243. chinese,
  244. letter,
  245. enOrNum,
  246. contains,
  247. range,
  248. rangeLength,
  249. empty,
  250. isEmpty: empty,
  251. jsonString,
  252. landline,
  253. object,
  254. array,
  255. code,
  256. func,
  257. promise,
  258. video,
  259. image,
  260. regExp,
  261. string
  262. }