validate.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. const bindMessage = (fn, message) => {
  2. fn.message = field => message.replace("%s", field || "");
  3. };
  4. export function required(message, opt = {}) {
  5. return {
  6. required: true,
  7. message,
  8. type: "string",
  9. ...opt
  10. };
  11. }
  12. bindMessage(required, "请输入%s");
  13. export function url(message, opt = {}) {
  14. return {
  15. type: "url",
  16. message,
  17. ...opt
  18. };
  19. }
  20. bindMessage(url, "请输入正确的链接");
  21. export function email(message, opt = {}) {
  22. return {
  23. type: "email",
  24. message,
  25. ...opt
  26. };
  27. }
  28. bindMessage(email, "请输入正确的邮箱地址");
  29. /**
  30. * 验证字段必须完全由字母构成。
  31. *
  32. * @param message
  33. * @returns {*}
  34. */
  35. export function alpha(message) {
  36. return attrs.pattern(/^[\w]+$/, message);
  37. }
  38. bindMessage(alpha, "%s必须是字母");
  39. /**
  40. * 只能包含由字母、数字,以及 - 和 _
  41. *
  42. * @param message
  43. * @returns {*}
  44. */
  45. export function alpha_dash(message) {
  46. return attrs.pattern(/^[\w\d_-]+$/, message);
  47. }
  48. bindMessage(alpha_dash, "%s只能包含由字母、数字,以及 - 和 _");
  49. /**
  50. * 必须是完全是字母、数字
  51. *
  52. * @param message
  53. * @returns {*}
  54. */
  55. export function alpha_num(message) {
  56. return attrs.pattern(/^[\w\d]+$/, message);
  57. }
  58. bindMessage(alpha_num, "%s只能包含字母、数字");
  59. /**
  60. * 正确的金额
  61. *
  62. * @param message
  63. * @returns {*}
  64. */
  65. export function num(message) {
  66. return attrs.pattern(
  67. /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  68. message
  69. );
  70. }
  71. bindMessage(num, "%s格式不正确");
  72. /**
  73. * 只能是汉字
  74. * @param message
  75. * @returns {*}
  76. */
  77. export function chs(message) {
  78. return attrs.pattern(/^[\u4e00-\u9fa5]+$/, message);
  79. }
  80. bindMessage(chs, "%s只能是汉字");
  81. /**
  82. * 只能包含汉字、字母
  83. * @param message
  84. * @returns {*}
  85. */
  86. export function chs_alpha(message) {
  87. return attrs.pattern(/^[\u4e00-\u9fa5\w]+$/, message);
  88. }
  89. bindMessage(chs_alpha, "%s只能包含汉字、字母");
  90. /**
  91. * 只能包含汉字、字母和数字
  92. * @param message
  93. * @returns {*}
  94. */
  95. export function chs_alpha_num(message) {
  96. return attrs.pattern(/^[\u4e00-\u9fa5\w\d]+$/, message);
  97. }
  98. bindMessage(chs_alpha_num, "%s只能包含汉字、字母和数字");
  99. /**
  100. * 只能包含由汉字、字母、数字,以及 - 和 _
  101. * @param message
  102. * @returns {*}
  103. */
  104. export function chs_dash(message) {
  105. return attrs.pattern(/^[\u4e00-\u9fa5\w\d-_]+$/, message);
  106. }
  107. bindMessage(chs_dash, "%s只能包含由汉字、字母、数字,以及 - 和 _");
  108. /**
  109. * 手机号验证
  110. * @param message
  111. * @returns {*}
  112. */
  113. export function chs_phone(message) {
  114. return attrs.pattern(/^1(3|4|5|7|8|9|6)\d{9}$/i, message);
  115. }
  116. bindMessage(chs_phone, "请输入正确的手机号码");
  117. const baseAttr = {
  118. min: "%s最小长度为:min",
  119. max: "%s最大长度为:max",
  120. length: "%s长度必须为:length",
  121. range: "%s长度为:range",
  122. pattern: "$s格式错误"
  123. };
  124. const attrs = Object.keys(baseAttr).reduce((attrs, key) => {
  125. attrs[key] = (attr, message = "", opt = {}) => {
  126. const _attr =
  127. key === "range" ? { min: attr[0], max: attr[1] } : { [key]: attr };
  128. return {
  129. message: message.replace(
  130. `:${key}`,
  131. key === "range" ? `${attr[0]}-${attr[1]}` : attr
  132. ),
  133. type: "string",
  134. ..._attr,
  135. ...opt
  136. };
  137. };
  138. bindMessage(attrs[key], baseAttr[key]);
  139. return attrs;
  140. }, {});
  141. export default attrs;