validate.js 8.9 KB

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