先看下面一则正则表达式的说明,

image.png

登录密码(大写字母、小写字母、数字、特殊符号都至少存在一位),并且要10位或以上(ok):

/^(?=.?[A-Z])(?=.?[a-z])(?=.?[0-9])(?=.?[.!~_*-+\?=@#$%^&])[a-zA-Z0-9.!~_*-+\?=@#$%^&]{10,}$/

登录密码的其它校验

  1. /**
  2. * 校验是否出现连续3位或以上数字、字符,字母不区分大小写(如:密码中不能包含888、999、aaa 或AAA或Bbb或等3位及以上的重复字符)
  3. * @param: password: 密码
  4. * @return: true为有出现连续3位或以上数字、字符;false为没有出现
  5. */
  6. validRepeatData(password){
  7. if (password) {
  8. var pwd = password.toUpperCase()
  9. var len = pwd.length
  10. for (var i = 0; i < len; ++i) {
  11. if (i + 2 < len) {
  12. var u1 = pwd.charAt(i)
  13. var u2 = pwd.charAt(i + 1)
  14. var u3 = pwd.charAt(i + 2)
  15. if (u1 === u2 && u2 === u3) return true
  16. }
  17. }
  18. }
  19. return false
  20. },
  21. ------------------------------------------------------------------------------------
  22. //不允许出现常见用户名或密码;whiteList为常见的名单
  23. checkCommonData(password){
  24. if (password) {
  25. var whiteList =['admin','root','administrator','password','qwerty'];
  26. var flag = false
  27. for(let i=0;i<whiteList.length;i++){
  28. if(password.indexOf(whiteList[i]) != -1){
  29. flag = true
  30. }
  31. }
  32. }
  33. return flag
  34. },
  35. ------------------------------------------------------------------------------------
  36. //密码中不能包含有连续四位及以上顺序(或逆序)字母,字母不区分大小写;(如:密码中不能包含abcd或ABCD或AbcD或DcbA等)
  37. // charCodeAt: 得到Unicode 编码值
  38. checkSeqChar(password){
  39. if (password) {
  40. var pwd = password.toUpperCase()
  41. var len = pwd.length
  42. for (var i = 0; i < len; ++i) {
  43. if (i + 3 < len) {
  44. var u1 = pwd.charCodeAt(i)
  45. var u2 = pwd.charCodeAt(i + 1)
  46. var u3 = pwd.charCodeAt(i + 2)
  47. var u4 = pwd.charCodeAt(i + 3)
  48. var m = u2 - u1
  49. if (m === 1 || m === -1) {
  50. if ((u3 - u2) === m && (u4 - u3) === m) return true
  51. }
  52. }
  53. }
  54. }
  55. return false
  56. },
  57. 调用:
  58. if (checkSeqChar('abcde34')) {
  59. console.log('密码中不能包含有连续四位及以上顺序(或逆序)字母,字母不区分大小写;(如:密码中不能包含abcd或ABCD或AbcD或DcbA等)')
  60. }
  61. ------------------------------------------------------------------------------------
  62. //密码中不能包含有连续四位及以上顺序(或逆序)数字;(如:密码中不能包含1234或3210等)
  63. //charAt返回字符串中的第几个字符
  64. checkNumSeq(password){
  65. if(password){
  66. var len = password.length;
  67. for(var i = 0; i < len; ++i){
  68. if(i + 3 < len){
  69. var c1 = password.charAt(i) - 0;
  70. var c2 = password.charAt(i + 1) - 0;
  71. var c3 = password.charAt(i + 2) - 0;
  72. var c4 = password.charAt(i + 3) - 0;
  73. if(isNaN(c1) || isNaN(c2) || isNaN(c3) || isNaN(c4))
  74. continue;
  75. var m = c2 - c1;
  76. if(m == 1 || m == -1){
  77. if((c3 - c2) == m && (c4 - c3) == m)
  78. return true;
  79. }
  80. }
  81. }
  82. }
  83. return false;
  84. }
  85. 调用:
  86. if (checkNumSeq('ad123456')) {
  87. console.log('密码中不能包含有连续四位及以上顺序(或逆序)数字;(如:密码中不能包含1234或3210等)')
  88. }

数字(不限字数):

/^[0-9]$/
/^\d
$/

n位的数字

/^\d{n}$/

至少n位的数字:

/^\d{n,}$/

m-n位的数字:

/^\d{m,n}$/

0和非0开头的数字:

/^(0|[1-9][0-9])$/
/^(0|[1-9]\d
)$/

大于0的数字,只支持1位小数:

/^([1-9]*(.\d{1})?|0.\d{1})$/

数字,只支持1位小数(ok):

/^\d+(.\d{1})?$/

非零开头的最多带两位小数的数字:

/^([1-9][0-9]*)+(.[0-9]{1,2})?$/

带1-2位小数的正数或负数:

/^(-)?\d+(.\d{1,2})?$/

正数、负数、和小数:

/^(-|+)?\d+(.\d+)?$/

有两位小数的正实数:

/^[0-9]+(.[0-9]{2})?$/

有1~3位小数的正实数:

/^[0-9]+(.[0-9]{1,3})?$/

非零的正整数:

/^[1-9]\d$/
/^([1-9][0-9]
){1,3}$/
/^+?[1-9][0-9]*$/

非零的负整数:

/^-[1-9]\d*$/

非负整数:

/^\d+$/

非正整数:

/^-[1-9]\d*|0$/

非负浮点数:

/^(0|[1-9]\d*)(.\d+)?$/

非正浮点数:

/^-(0|[1-9]\d*)(.\d+)?$/

正浮点数:

/^(0|[1-9]\d*).\d+$/

负浮点数:

/^-?(0|[1-9]\d*).\d+$/

浮点数:

/^(-?\d+)(.\d+)?$/

固定电话(ok):

/^0\d{2,3}-?\d{7,8}$/

电话格式为(ok):区号-电话号码

/^\d{3}-\d{7,8}|\d{4}-\d{7,8}$/

手机号(ok):

/^((\d{3,4})|\d{3,4}-|\s)?\d{11}$/

手机号+座机校验(ok):

/^((0\d{2,3}-\d{7,8})|(1[35847]\d{9}))$/

邮箱(ok)(名称@域名(名称:数字,字母,汉字;域名:数字,字母,下划线,中划线)):

/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)+$/

身份证(ok):

/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i

ip地址:

/^(\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])$/

端口:

/^([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])$/

密码(至少包含大,小写字母,数字中的一位;且长度为8-16位):

/^(?=.[a-z])(?=.[A-Z])(?=.\d)(?!.[\W])[^]{8,16}$/

月份1-12(ok):

/^(0?[1-9]|1[0-2])$/

天数1-31(ok):

/^((0?[1-9])|((1|2)[0-9])|30|31)$/

示例:

rulesConstant.js

  1. export const ValidRules = {
  2. // 身份证校验
  3. validIdCard(rule, value, callback) {
  4. if (!!value) {
  5. if (!/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(value)) {
  6. callback(new Error('身份证号码格式不正确!'));
  7. } else {
  8. callback();
  9. }
  10. } else {
  11. callback();
  12. }
  13. }
  14. }

vue页面引用

  1. import { ValidRules } from '@/common/js/rulesConstant'; //校验
  2. rules: {
  3. idCard: [{required: true,message:'身份证号必填',trigger:'blur'},
  4. {validator: ValidRules.validIdCard, trigger:'blur'}]
  5. },

参考