validators.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const ObjectId = require('mongoose').Types.ObjectId;
  2. const createError = require('http-errors');
  3. const moment = require('moment');
  4. /**
  5. * 验证ID
  6. */
  7. function validateId(id, errMsg) {
  8. errMsg = errMsg || 'ID错误!';
  9. if (!ObjectId.isValid(id)) {
  10. throw createError(400, errMsg);
  11. }
  12. }
  13. const phoneRegex = /^1[\d]{10}$/;
  14. function validatePhone(phone, errMsg) {
  15. errMsg = errMsg || '手机号格式错误'
  16. if (!phoneRegex.test(phone)) {
  17. throw createError(400, errMsg)
  18. }
  19. }
  20. const usernameRegex = /^[a-zA-Z0-9_\.]{5,}$/;
  21. function validateUsername(username, errMsg) {
  22. errMsg = errMsg || '用户名格式错误'
  23. if (!usernameRegex.test(username)) {
  24. throw createError(400, errMsg)
  25. }
  26. }
  27. const passwordRegex = /^.{8,}$/
  28. function validatePassword(password, errMsg) {
  29. errMsg = errMsg || '密码格式错误'
  30. if (!passwordRegex.test(password)) {
  31. throw createError(400, errMsg)
  32. }
  33. }
  34. function validateName(name, errMsg) {
  35. if (!name || name.length < 2) {
  36. throw createError(400, errMsg || '名字最少两位')
  37. }
  38. }
  39. const idNoRegex = /^[\d]{17}[\dx]$/i
  40. function validateIdNo(no, errMsg) {
  41. if (!idNoRegex.test(no))
  42. throw createError(400, '身份证格式错误');
  43. }
  44. let vinRegex = /^[A-HJ-NPR-Z0-9]{17}$/;
  45. function validateVIN(vin) {
  46. if (!vinRegex.test(vin))
  47. throw createError(400, 'vin错误')
  48. }
  49. let DATE_FORMAT = ['YYYYMMDD', 'YYYY-MM-DD', 'YYYY/MM/DD'];
  50. function validateDate(date) {
  51. let mmt = moment(date, DATE_FORMAT, true);
  52. if (!mmt.isValid()) throw createError(400, '日期格式错误')
  53. let startOfDay = mmt.startOf('day').toDate();
  54. let endOfDay = mmt.endOf('day').toDate();
  55. return [startOfDay, endOfDay];
  56. }
  57. function isValidDate(d) {
  58. return d instanceof Date && !isNaN(d);
  59. }
  60. module.exports = {
  61. validateId,
  62. validatePhone,
  63. validateName,
  64. validateIdNo,
  65. validateVIN,
  66. validateDate,
  67. validatePassword,
  68. validateUsername,
  69. isValidDate,
  70. }