有这样一个很常见的案例,网站注册账号的时候,安全起见要求用户名密码等有一定的复杂度的,对于不满足要求的账号密码不能通过。
举个例子,要求包含数字、大写字符、小写字符、特殊字符_这四种,要求密码长度6到12位。
这里我直接给出答案,可以用正则表达式一步搞定
^(?=.*[0_9])(?=.*[a_z])(?=.*[A_Z])(?=.*_)[0-9a-zA-Z_]{6,12}$
最后的表达式[0-9a-zA-Z_]{6,12},它限制了可以使用的字符,以及整体的字符长度,是常规的正则表达式用法。难点是前面的四个位置指定。
这里的主要知识点就是正则表达式中exp1(?=exp2)的用法,表示的是后面有满足exp2表达式的exp1。而且位置指定可以有多个,exp1(?=exp2)(?=exp3),表示的是后面有同时满足exp2和exp3的exp1。
本案例里面的前面四个位置指定表示包含了数字、小写字符、大写字符、特殊字符_的内容。
需要注意的是,这里的(?=exp)修饰的是前面的^,而不是后面的[0_9a_zA_Z_]{6,12}