validate.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. /**
  2. * 邮箱
  3. * @param {*} s
  4. */
  5. export function isEmail (s) {
  6. return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
  7. }
  8. /**
  9. * 手机号码
  10. * @param {*} s
  11. */
  12. export function isMobile (s) {
  13. return /^1[0-9]{10}$/.test(s)
  14. }
  15. /**
  16. * 电话号码
  17. * @param {*} s
  18. */
  19. export function isPhone (s) {
  20. return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
  21. }
  22. /**
  23. * URL地址
  24. * @param {*} s
  25. */
  26. export function isURL (s) {
  27. return /^http[s]?:\/\/.*/.test(s)
  28. }
  29. /* 小写字母 */
  30. export function isLowerCase (str) {
  31. const reg = /^[a-z]+$/
  32. return reg.test(str)
  33. }
  34. /* 大写字母 */
  35. export function isUpperCase (str) {
  36. const reg = /^[A-Z]+$/
  37. return reg.test(str)
  38. }
  39. /* 大小写字母 */
  40. export function isAlphabets (str) {
  41. const reg = /^[A-Za-z]+$/
  42. return reg.test(str)
  43. }
  44. /* 验证pad还是pc */
  45. export const isPc = function () {
  46. const userAgentInfo = navigator.userAgent
  47. const Agents = ['Android', 'iPhone',
  48. 'SymbianOS', 'Windows Phone',
  49. 'iPad', 'iPod']
  50. let flag = true
  51. for (let v = 0; v < Agents.length; v++) {
  52. if (userAgentInfo.indexOf(Agents[v]) > 0) {
  53. flag = false
  54. break
  55. }
  56. }
  57. return flag
  58. }
  59. /**
  60. * 判断姓名是否正确
  61. */
  62. export function isName (name) {
  63. let regName = /^[\u4e00-\u9fa5]{2,4}$/
  64. if (!regName.test(name)) return false
  65. return true
  66. }
  67. /**
  68. * 判断是否为整数
  69. */
  70. export function isNum (num, type) {
  71. let regName = /[^\d.]/g
  72. if (type === 1) {
  73. if (!regName.test(num)) return false
  74. } else if (type === 2) {
  75. regName = /[^\d]/g
  76. if (!regName.test(num)) return false
  77. }
  78. return true
  79. }
  80. /**
  81. * 判断是否为小数
  82. */
  83. export function isFloat (num) {
  84. let regName1 = /^\d+(\.\d+)?$/
  85. let regName2 = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/
  86. if (regName1.test(num) || regName2.test(num)) return true
  87. return false
  88. }
  89. /**
  90. * 判断是否为空
  91. */
  92. export function isNull (val) {
  93. if (val instanceof Array) {
  94. if (val.length === 0) return true
  95. } else if (val instanceof Object) {
  96. if (JSON.stringify(val) === '{}') return true
  97. } else {
  98. if (val === 'null' || val == null || val === 'undefined' || val === undefined || val === '') return true
  99. return false
  100. }
  101. return false
  102. }
  103. /**
  104. * 判断身份证号码
  105. */
  106. export function isCardId (code) {
  107. let msg = ''
  108. const city = {
  109. 11: '北京',
  110. 12: '天津',
  111. 13: '河北',
  112. 14: '山西',
  113. 15: '内蒙古',
  114. 21: '辽宁',
  115. 22: '吉林',
  116. 23: '黑龙江 ',
  117. 31: '上海',
  118. 32: '江苏',
  119. 33: '浙江',
  120. 34: '安徽',
  121. 35: '福建',
  122. 36: '江西',
  123. 37: '山东',
  124. 41: '河南',
  125. 42: '湖北 ',
  126. 43: '湖南',
  127. 44: '广东',
  128. 45: '广西',
  129. 46: '海南',
  130. 50: '重庆',
  131. 51: '四川',
  132. 52: '贵州',
  133. 53: '云南',
  134. 54: '西藏 ',
  135. 61: '陕西',
  136. 62: '甘肃',
  137. 63: '青海',
  138. 64: '宁夏',
  139. 65: '新疆',
  140. 71: '台湾',
  141. 81: '香港',
  142. 82: '澳门',
  143. 91: '国外 '
  144. }
  145. if (!isNull(code)) {
  146. if (code.length === 18) {
  147. if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
  148. msg = '证件号码格式错误'
  149. return false
  150. } else if (!city[code.substr(0, 2)]) {
  151. msg = '地址编码错误'
  152. return false
  153. } else {
  154. // 18位身份证需要验证最后一位校验位
  155. code = code.split('')
  156. // ∑(ai×Wi)(mod 11)
  157. // 加权因子
  158. let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  159. // 校验位
  160. let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x']
  161. let sum = 0
  162. let ai = 0
  163. let wi = 0
  164. for (let i = 0; i < 17; i++) {
  165. ai = code[i]
  166. wi = factor[i]
  167. sum += ai * wi
  168. }
  169. let last = parity[sum % 11]
  170. if ('' + last !== '' + code[17]) {
  171. msg = '证件号码校验位错误'
  172. return false
  173. }
  174. }
  175. } else {
  176. msg = '证件号码长度不为18位'
  177. return false
  178. }
  179. } else {
  180. msg = '证件号码不能为空'
  181. return false
  182. }
  183. if (msg) {
  184. console.log(msg)
  185. }
  186. return true
  187. }
  188. /*
  189. * 整数必须为0
  190. */
  191. export function isIntEqZero (value) {
  192. value = parseInt(value)
  193. return value === 0
  194. }
  195. /*
  196. * 判断整数value是否大于0
  197. * 整数必须大于0
  198. */
  199. export function isIntGtZero (value) {
  200. value = parseInt(value)
  201. return value > 0
  202. }
  203. /*
  204. * 判断整数value是否大于或等于0
  205. * 整数必须大于或等于0
  206. */
  207. export function isIntGteZero (value) {
  208. value = parseInt(value)
  209. return value >= 0
  210. }
  211. /*
  212. * 判断整数value是否不等于0
  213. * 整数必须不等于0
  214. */
  215. export function isIntNEqZero (value) {
  216. value = parseInt(value)
  217. return value !== 0
  218. }
  219. /*
  220. * 判断整数value是否不等于0
  221. * 整数必须小于0
  222. */
  223. export function isIntLtZero (value) {
  224. value = parseInt(value)
  225. return value < 0
  226. }
  227. /*
  228. * 判断整数value是否小于或等于0
  229. * 整数必须小于或等于0
  230. */
  231. export function isIntLteZero (value) {
  232. value = parseInt(value)
  233. return value <= 0
  234. }
  235. /*
  236. * 判断浮点数value是否等于0
  237. * 浮点数必须为0
  238. */
  239. export function isFloatEqZero (value) {
  240. value = parseFloat(value)
  241. return value === 0
  242. }
  243. /*
  244. * 判断浮点数value是否大于0
  245. * 浮点数必须大于0
  246. */
  247. export function isFloatGtZero (value) {
  248. value = parseFloat(value)
  249. return value > 0
  250. }
  251. /*
  252. * 判断浮点数value是否大于或等于0
  253. * 浮点数必须大于或等于0
  254. */
  255. export function isFloatGteZero (value) {
  256. value = parseFloat(value)
  257. return value >= 0
  258. }
  259. /*
  260. * 判断浮点数value是否不等于0
  261. * 浮点数必须不等于0
  262. */
  263. export function isFloatNEqZero (value) {
  264. value = parseFloat(value)
  265. return value !== 0
  266. }
  267. /*
  268. * 判断浮点数value是否小于0
  269. * 浮点数必须小于0
  270. */
  271. export function isFloatLtZero (value) {
  272. value = parseFloat(value)
  273. return value < 0
  274. }
  275. /*
  276. * 判断浮点数value是否小于或等于0
  277. * 浮点数必须小于或等于0
  278. */
  279. export function isFloatLteZero (value) {
  280. value = parseFloat(value)
  281. return value <= 0
  282. }
  283. /*
  284. * 匹配integer
  285. * 匹配integer
  286. */
  287. export function isInteger (value) {
  288. // eslint-disable-next-line no-useless-escape
  289. return (/^[-\+]?\d+$/.test(value) && parseInt(value) >= 0)
  290. }
  291. /*
  292. * 判断数值类型,包括整数和浮点数
  293. * 匹配数值类型,包括整数和浮点数
  294. */
  295. export function isNumber (value) {
  296. // eslint-disable-next-line no-useless-escape
  297. return /^[-\+]?\d+$/.test(value) || /^[-\+]?\d+(\.\d+)?$/.test(value)
  298. }
  299. /*
  300. * 只能输入[0-9]数字
  301. * 只能输入[0-9]数字
  302. */
  303. export function isDigits (value) {
  304. return /^\d+$/.test(value)
  305. }
  306. /*
  307. * 判断英文字符
  308. * 只能包含英文字符。
  309. */
  310. export function isEnglish (value) {
  311. return /^[A-Za-z]+$/.test(value)
  312. }
  313. /*
  314. * 联系电话(手机/电话皆可)验证
  315. * 请正确填写您的联系方式
  316. */
  317. export function isTel (value) {
  318. var length = value.length
  319. var mobile = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/
  320. var tel = /^(\d{3,4}-?)?\d{7,9}$/g
  321. return tel.test(value) || (length === 11 && mobile.test(value))
  322. }
  323. /*
  324. * 匹配qq
  325. * 匹配QQ
  326. */
  327. export function isQq (value) {
  328. return /^[1-9]\d{1,12}$/.test(value)
  329. }
  330. /*
  331. * 邮政编码验证
  332. * 请正确填写您的邮政编码。
  333. */
  334. export function isZipCode (value) {
  335. var zip = /^[0-9]{6}$/
  336. return zip.test(value)
  337. }
  338. /*
  339. * 匹配密码,以字母开头,长度在6-12之间,只能包含字符、数字和下划线。
  340. * 以字母开头,长度在6-12之间,只能包含字符、数字和下划线。
  341. */
  342. export function isPwd (value) {
  343. return /^[a-zA-Z]\\w{6,12}$/.test(value)
  344. }
  345. /*
  346. * IP地址验证
  347. * 请填写正确的IP地址。
  348. */
  349. export function ip (value) {
  350. return /^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.){2}([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$/.test(value)
  351. }
  352. /*
  353. * 字符验证,只能包含中文、英文、数字、下划线等字符。
  354. * 只能包含中文、英文、数字、下划线等字符
  355. */
  356. export function stringCheck (value) {
  357. return /^[a-zA-Z0-9\u4e00-\u9fa5-_]+$/.test(value)
  358. }
  359. /*
  360. * 匹配汉字
  361. * 匹配汉字
  362. */
  363. export function isChinese (value) {
  364. return /^[\u4e00-\u9fa5]+$/.test(value)
  365. }
  366. /*
  367. * 匹配中文(包括汉字和字符)
  368. * 匹配中文(包括汉字和字符)
  369. */
  370. export function isChineseChar (value) {
  371. return /^[\u0391-\uFFE5]+$/.test(value)
  372. }
  373. /*
  374. * 判断是否为合法字符(a-zA-Z0-9-_)
  375. * 判断是否为合法字符(a-zA-Z0-9-_)
  376. */
  377. export function isRightfulString (value) {
  378. return /^[A-Za-z0-9_-]+$/.test(value)
  379. }
  380. // 车牌号校验
  381. export function isPlateNo (plateNo) {
  382. var re = /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$/
  383. if (re.test(plateNo)) {
  384. return true
  385. }
  386. return false
  387. }
  388. export default {isAlphabets, isCardId, isChinese, isChineseChar, isDigits, isEmail, isEnglish, isFloat, stringCheck, isFloatGteZero, ip, isFloatEqZero, isFloatGtZero, isFloatLtZero, isFloatLteZero, isFloatNEqZero, isIntEqZero, isIntGtZero, isIntGteZero, isIntLtZero, isIntLteZero, isIntNEqZero, isInteger, isLowerCase, isMobile, isName, isNull, isNum, isNumber, isPc, isPhone, isPlateNo, isPwd, isQq, isRightfulString, isTel, isURL, isUpperCase, isZipCode}