正则表达式为密码6-12 chars一个数字,一个大写

时间:2017-05-30 04:48:39

标签: php regex

我尝试使用此常规exp检查用户密码:

$regex='/^(?=.*[A-Za-z0-9@])(?=.*\d)[a-zA-Z0-9@]{6,12}$/';

if(isset($_POST['password']) && strlen($_POST['password'])>=6 && 
strlen($_POST['password']<=12) && preg_match($regex, $_POST['password'])){

echo 'ok';
}else{echo 'invalid password';}

我希望密码为6到12个字符,至少一个数字和至少一个大写字母。

如果密码类似 12Hello ,它不起作用,而不是 Hello12 ,有人可以帮忙吗?

由于

2 个答案:

答案 0 :(得分:3)

你的角色类太广了。你需要单独检查一下。

^(?=.*[A-Z])(?=.*\d).{6,12}$

(?=.*[A-Z])至少是一个大写字符 (?=.*\d)至少有一个号码 并且.{6,12}是6-12个字符(不是新行)
^$是确保完整字符串匹配的锚点。

在你的正则表达式中,你的角色类[A-Za-z0-9@]允许使用大写字母,小写,数字或@(它不能确保你有1个大写字符)。如果使用此正则表达式,您也不需要strlen函数。

答案 1 :(得分:0)

试试这个: -

最少6个字符

Atleast 1大写字符

至少一位数

表达式:

"/^(?=.*?[0-9])(?=.*[A-Z]).{6,12}$/"