2017-05-30 44 views
-1

我想这个EXP定期检查用户密码:正则表达式的密码字符6-12一个数字,一个大写

$regex='/^(?=.*[[email protected]])(?=.*\d)[[email protected]]{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它不工作,有人可以请帮助?

由于

+0

这不适用于**干净的**正则表达式。它必须非常强大。 –

+0

你能澄清你的问题吗?它对'12Hello'和'Hello12'都有好的回应,除非你在做什么或除了你发布的内容之外做了什么。 [这是一个工作演示](https://3v4l.org/N4FVL)。顺便说一下,请在发布之前尝试格式化您的代码。您发布的代码很难阅读,这会导致错误。 –

+0

这个问题上有很好的例子 - https://stackoverflow.com/questions/19605150/regex-for-password-must-be-contain-at-least-8-characters-least-1-number-and-bot – ASR

回答

0

尝试这一个: -

最少6字符

ATLEAST 1大写字符

至少一个数位

表达:

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

编辑完成后,现在这个答案与我的相同,尽管缺少说明。 – chris85

+0

对不起克里斯,当我发布我的答案..我真的没有检查你的答案上面。 –

+0

这里'?''。*?'是多余的。无论如何,'*'是0或更多。 – fubar

3

你的性格阶层太宽泛。你需要分别检查事情。

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

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

在您的正则表达式中,您的字符类[[email protected]]允许使用大写字符,小写字母,数字或@(这不能确保您有1个大写字符)。如果使用这个正则表达式,您也不需要strlen函数。

相关问题