validate.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /**
  2. * 格式校验工具方法
  3. */
  4. export default {
  5. /* 是否是手机号 */
  6. isPhone(value) {
  7. const reg = /^1\d{10}$/;
  8. return reg.test(value);
  9. },
  10. /* 是否为固话 */
  11. isTel(value) {
  12. const reg = /^(400|800)([0-9\\-]{7,10})|(([0-9]{4}|[0-9]{3})(-| )?)?([0-9]{7,8})((-| |转)*([0-9]{1,4}))?$/;
  13. return reg.test(value);
  14. },
  15. /* 是否是邮箱 */
  16. isEmail(value) {
  17. const reg = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  18. return reg.test(value);
  19. },
  20. /* 是否是网址 */
  21. isUrl(value) {
  22. const reg = /(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/;
  23. return reg.test(value);
  24. },
  25. /* 是否是数字 */
  26. isNumber(value) {
  27. /*const reg = /^1\d{10}$/;
  28. return reg.test(value);*/
  29. return !isNaN(value);
  30. },
  31. /* 是否是日期 */
  32. isDate(value) {
  33. const reg = /^(\d{4})[-/](\d{1}|0\d{1}|1[0-2])([-/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/;
  34. return reg.test(value);
  35. },
  36. /* 是否是身份证 */
  37. isIdentity(value) {
  38. const reg = /(^\d{15}$)|(^\d{17}(x|X|\d)$)/;
  39. return reg.test(value);
  40. },
  41. /* 是否是整数 */
  42. isDigits(value) {
  43. const reg = /^-?\d+$/;
  44. return reg.test(value);
  45. },
  46. /* 是否是正整数 */
  47. isDigitsP(value) {
  48. const reg = /^[1-9]\d*$/;
  49. return reg.test(value);
  50. },
  51. /* 是否是负整数 */
  52. isDigitsN(value) {
  53. const reg = /^-[1-9]\d*$/;
  54. return reg.test(value);
  55. },
  56. /* 是否是非负整数(正整数或0) */
  57. isDigitsPZ(value) {
  58. const reg = /^\d+$/;
  59. return reg.test(value);
  60. },
  61. /* 是否是非正整数(负整数或0) */
  62. isDigitsNZ(value) {
  63. const reg = /^-[1-9]\d*|0/;
  64. return reg.test(value);
  65. },
  66. /* 验证最小长度、最大长度 */
  67. maxMinLength(value, minLength, maxLength) {
  68. if (value === undefined || value === null) return !minLength;
  69. if (minLength && value.toString().length < minLength) return false;
  70. return !(maxLength !== undefined && maxLength !== null && value.toString().length > maxLength);
  71. },
  72. /* 验证最小值、最大值 */
  73. maxMin(value, min, max) {
  74. if (value === undefined || value === null) return min === undefined || min === null;
  75. if (min !== undefined && min !== null && value < min) return false;
  76. return !(max !== undefined && max !== null && value > max);
  77. },
  78. /* 是否是中文 */
  79. isChina(value) {
  80. const reg = /^[\u4E00-\u9FA5]{2,4}$/;
  81. return reg.test(value);
  82. },
  83. /* 是否是端口号 */
  84. isPort(value) {
  85. const reg = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
  86. return reg.test(value);
  87. },
  88. /* 是否是IP */
  89. isIP(value) {
  90. const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
  91. return reg.test(value);
  92. },
  93. /* 是否是经度 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数) */
  94. isLongitude(value) {
  95. const reg = /^[-|+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/;
  96. return reg.test(value);
  97. },
  98. /* 是否是纬度 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数) */
  99. isLatitude(value) {
  100. const reg = /^[-|+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/;
  101. return reg.test(value);
  102. },
  103. /* 是否是身份证(强校验) */
  104. isIdentityStrong(value) {
  105. if (!this.isIdentity(value)) return '身份证号码格式错误';
  106. const ai = value.length === 18 ? value.substring(0, 17) : (value.substring(0, 6) + '19' + value.substring(6, 15));
  107. // 验证出生年月
  108. const year = ai.substring(6, 10); // 年
  109. const birthday = year + '/' + ai.substring(10, 12) + '/' + ai.substring(12, 14);
  110. if (!this.isDate(birthday)) return '身份证号码出生日期无效';
  111. const now = new Date();
  112. if ((now.getFullYear() - parseInt(year)) > 150 || (now.getTime() - new Date(birthday).getTime()) < 0)
  113. return '身份证号码出生日期不在有效范围';
  114. // 验证地区码
  115. const areaCodes = ['11', '12', '13', '14', '15', '21', '22', '23',
  116. '31', '32', '33', '34', '35', '36', '37', '41', '42', '43', '44', '45', '46',
  117. '50', '51', '52', '53', '54', '61', '62', '63', '64', '65', '71', '81', '82', '91'];
  118. if (areaCodes.indexOf(ai.substring(0, 2)) === -1) return '身份证号码地区编码错误';
  119. // 验证最后一位
  120. if (value.length === 18) {
  121. const valCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  122. const wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  123. let totalMulAiWi = 0;
  124. for (let i = 0; i < 17; i++) totalMulAiWi += parseInt(ai.charAt(i)) * wi[i];
  125. if (value !== (ai + valCode[totalMulAiWi % 11])) return '身份证号码最后一位错误';
  126. }
  127. }
  128. }