notes icon indicating copy to clipboard operation
notes copied to clipboard

PCRE正则表达式密码强度验证 or PCRE Regular Expressions For Password

Open lanlin opened this issue 5 years ago • 0 comments

应用场景

密码规则要求必须同时包含数字,小写字母,大写字母,特殊字符(标点),且长度在n到m之间。

与之对应的 ASCII 编码范围为 33(!)-126(~), 对应的PCRE正则字符集范围为 [!-~] 或者[\x21-\x7E]

代码如下

/^(?=.*[[:digit:]])(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]])[[:graph:]]{n,m}$/

正则分段说明

/^$/                 // 开始到结束

(?=.*[[:digit:]])    // 至少包含一个数字

(?=.*[[:lower:]])    // 至少包含一个小写字母

(?=.*[[:punct:]])    // 至少包含一个特殊字符(标点符号)

[[:graph:]]{n,m}     // 只能为n-m位长度的可打印字符(空格除外)

PHP Demo

同时包含数字,小写字母,大写字母,特殊字符(标点),且长度在8到32个字符之间。

$pass = 'sdfj^(U0gnj;adfall09h';
$rule = '/^(?=.*[[:digit:]])(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]])[[:graph:]]{8,32}$/';

if (!preg_match($rule, $pass))
{
    // do some thing
}

lanlin avatar May 06 '20 11:05 lanlin