正则表达式总结

1.字符串中不能包含 / \ : ? * " < > | % 符号

const reg = /^[^/\\::??"<>%\|]*$/

2.密码规则

至少 8 个字符
至少 1 位数
至少 1 个小写字母
至少 1 个大写字母
至少一个特殊字符
不包含空格(),反斜杠(\)和引号(“)

整体的正则表达式如下:

const pwdReg = /^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!#$%&'()*+,-./:;<=>?@[\]^_`{|}~])(?=\S+$)(?!.*[\u0022\u005C]).{8,20}$/g;

遇到了一个需求:上述规则需要动态配置,也就是说正则表达式需要写成动态的,实现的方式就是根据条件拼字符串,然后转成正则表达式,直接写代码:

const pwdPolicyReg = (params: any) => {
  let pattern = "^";
  if (params?.passwordPolicyContainNumber) {
    pattern += "(?=.*[0-9])";
  }
  if (params?.passwordPolicyContainLowercase) {
    pattern += "(?=.*[a-z])";
  }
  if (params?.passwordPolicyContainUppercase) {
    pattern += "(?=.*[A-Z])";
  }
  if (params?.passwordPolicyContainSpecialCharacter) {
    pattern += '(?=.*[!#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~])';
  }
  pattern += `(?=\\S+$)(?!.*[\\u0022\\u005C]).{${params?.passwordPolicyMinLength},20}$`;
  return new RegExp(pattern, "g");
}

有个地方需要提示一下,正则表达式下的反斜杠(转义字符)处理特殊字符,转成字符串的时候需要写两个,因为在字符串中反斜杠也是个特殊字符,例如换行\n,\t空格等,因此,如果我们想在字符串中表示一个正则表达式中的反斜杠,就需要使用两个反斜杠,即\\。第一个反斜杠用于在字符串中进行转义,第二个反斜杠用于在正则表达式中进行转义。

你可能感兴趣的:(个人总结,学习)