密码长度 6-12 位,由数字、小写字符和大写字母组成,但必须至少包括 2 种字符。

1. 不考虑「但必须至少包括 2 种字符」这一条件

const regExp = /^[0-9A-Za-z]{6,12}$/

2. 判断是否包含有某一种字符,可以用 (?=.*[0-9])

const regExp = /(?=.*[0-9])^[0-9A-Za-z]{6,12}$/

对于 (?=.*[0-9])^ 拆分就是:(?=.*[0-9])^

表示开头前面还有个位置,(?=.*[0-9]) 表示该位置后面的字符匹配 .*[0-9],即有任何多个任意字符,后面再跟个数字。

3. 同时包含具体两种字符。比如同时包含数字和小写字母,可以用 (?=.*[0-9])(?=.*[a-z])

const regExp = /(?=.*[0-9])(?=.*[a-z])^[0-9A-Za-z]{6,12}$/

4. 所有的情况

  1. 同时包含数字和小写字母
  2. 同时包含数字和大写字母
  3. 同时包含小写字母和大写字母
  4. 同时包含数字、小写字母和大写字母

以上的 4 种情况是的关系(实际上,可以不用第 4 条)

const regExp = /((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))^[0-9A-Za-z]{6,12}$/

regExp.test('1234567')
// false 全是数字

regExp.test('abcdef')
// false 全是小写字母

regExp.test('ABCDEFGH')
// false 全是大写字母

regExp.test('ab23C')
// false 不足6位

regExp.test('ABCDEF234')
// true 大写字母和数字

regExp.test('abcdEF234')
// true 三者都有