formRules.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // async-validator rules
  2. // to view at https://github.com/yiminghe/async-validator
  3. const username = [
  4. {
  5. required: true,
  6. pattern: /^[a-zA-Z0-9][a-zA-Z0-9_]{2,19}$/,
  7. message: "用户名必须以字母或数字开头,长度为3-20位,允许字母数字下划线",
  8. trigger: "change",
  9. },
  10. ];
  11. const commonCode = ({ prop, min = 3, max = 20 }) => {
  12. return [
  13. {
  14. required: true,
  15. pattern: new RegExp(`^[a-zA-Z0-9_]{${min},${max}}$`),
  16. message: `${prop}只能由数字、字母和下划线组成,长度${min}-${max}个字符`,
  17. trigger: "change",
  18. },
  19. ];
  20. };
  21. const email = [
  22. {
  23. required: true,
  24. type: "email",
  25. message: "邮箱格式不正确",
  26. trigger: "change",
  27. },
  28. ];
  29. const password = [
  30. {
  31. required: true,
  32. pattern: /^[a-zA-Z0-9_]{6,20}$/,
  33. message: "密码只能由数字、字母和下划线组成,长度6-20个字符",
  34. trigger: "change",
  35. },
  36. ];
  37. const strictPassword = [
  38. {
  39. required: true,
  40. validator: (rule, value, callback) => {
  41. if (!value) {
  42. return callback(new Error(`请输入密码`));
  43. }
  44. // // 禁止使用相同的数字或字符作为密码
  45. // const reg2 = /^[a-zA-Z0-9].+$/;
  46. // const vals = new Set(value.split(""));
  47. // if (reg2.test(value) && vals.size === 1) {
  48. // return callback(new Error(`禁止使用相同的数字或字符作为密码`));
  49. // }
  50. // // 禁止使用连续升序或降序的数字或字母作为密码
  51. // const valCharCodes = value.split("").map((item) => item.charCodeAt());
  52. // let intervals = [];
  53. // for (let i = 0; i < valCharCodes.length; i++) {
  54. // const element = valCharCodes[i];
  55. // if (i === 0) continue;
  56. // intervals.push(element - valCharCodes[i - 1]);
  57. // }
  58. // const interVals = Array.from(new Set(intervals));
  59. // if (
  60. // reg2.test(value) &&
  61. // interVals.length === 1 &&
  62. // Math.abs(interVals[0]) === 1
  63. // ) {
  64. // return callback(
  65. // new Error(`禁止使用连续升序或降序的数字或字母作为密码`)
  66. // );
  67. // }
  68. // 密码应至少包含数字、大小写字母及特殊宇符中的两种;
  69. const reg1 =
  70. /^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)(?![!@#$%^&*]+$)[\da-zA-Z!@#$%^&*]{8,20}$/g;
  71. if (!reg1.test(value)) {
  72. return callback(
  73. new Error(
  74. `密码应至少包含数字、大小写字母及特殊宇符(!@#$%^&*)中的两种,长度8-20位`
  75. )
  76. );
  77. }
  78. return callback();
  79. },
  80. trigger: "change",
  81. },
  82. ];
  83. const phone = [
  84. {
  85. required: true,
  86. pattern: /^1\d{10}$/,
  87. message: "请输入合适的手机号码",
  88. trigger: "change",
  89. },
  90. ];
  91. const smscode = [
  92. {
  93. required: true,
  94. pattern: /^[a-zA-Z0-9]{4}$/,
  95. message: "请输入4位短信验证码",
  96. trigger: "change",
  97. },
  98. ];
  99. const numberValidator = ({ prop, min = 1, max = 100 }) => {
  100. return [
  101. {
  102. required: true,
  103. validator: (rule, value, callback) => {
  104. if (!value && value !== 0) {
  105. return callback(new Error(`请输入${prop}`));
  106. }
  107. if (!Number.isInteger(value)) {
  108. callback(new Error("请输入数字值"));
  109. } else {
  110. if (value < min || value > max) {
  111. callback(new Error(`${prop}的大小只能介于${min}-${max}之间。`));
  112. } else {
  113. callback();
  114. }
  115. }
  116. },
  117. trigger: "change",
  118. },
  119. ];
  120. };
  121. export {
  122. username,
  123. commonCode,
  124. email,
  125. password,
  126. strictPassword,
  127. phone,
  128. smscode,
  129. numberValidator,
  130. };