Php 使用preg_match识别强密码

Php 使用preg_match识别强密码,php,regex,html,Php,Regex,Html,我曾想过使用preg_match()检查密码输入是否正确。我需要至少1个大写字母、至少1个小写字母、至少一个数字和至少一个特殊字符。以下是我正在使用的: $pattern = "(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"; 这个正则表达式在HTML的“模式”字段中运行良好。但我需要确保它也能在较旧的浏览器上得到验证 我的PHP代码如下: if (!(preg_match($pattern, $loginp

我曾想过使用preg_match()检查密码输入是否正确。我需要至少1个大写字母、至少1个小写字母、至少一个数字和至少一个特殊字符。以下是我正在使用的:

$pattern = "(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$";
这个正则表达式在HTML的“模式”字段中运行良好。但我需要确保它也能在较旧的浏览器上得到验证

我的PHP代码如下:

if (!(preg_match($pattern, $loginpassword))) {echo "Password must include one uppercase letter, one lowercase letter, one number, and one special character such as $ or %."; die;}

我认为它工作得很好,除了当我使用密码的时候1@abcdeF它也无法匹配。php代码似乎可以工作,但没有密码匹配,即使它应该符合模式。HTML5会让它通过,所以我怀疑regex语句是正确的,但是我在PHP中的设置有一些缺陷。有人能看到我遗漏了什么吗?

PHP正则表达式也需要正则表达式分隔符,所以请使用:

$pattern = '/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/';

使用以下模式:

$strong_password=preg_match('/^(?=[a-z])(?=[a-z])(?=.\d)(?=[a-Za-z\d])[\s\s]{6,16}$/',$string)


在问题中包含错误消息。很明显,这个代码示例会抛出一个错误。@Evert,我没有收到任何错误消息。只是不匹配。代码正在运行。很抱歉,我将编辑“失败”以使其更具体,这样就清楚了。我尝试了此操作,但遇到了相同的问题。它还是不让我走@abcdeF通过,它应该…:-(嘿,并不是说正则表达式不起作用……但我实现它的方式似乎有点错误。上面使用“preg_match”的语法正确吗?啊。我刚刚意识到我的代码是在看散列,而不是密码。荷马·辛普森……哦。我建议用“\s”替换2个选择器“\s\s”(字面上是空格字符和任何非空白字符),因为您当前的解决方案允许在多行上输入密码。
^                 --> start of string

(?=.*[a-z])       --> at least one lowercase letter 

(?=.*[A-Z])       --> at least one uppercase letter 

(?=.*\d)          --> at least one number 

(?=.*[^A-Za-z\d]) --> at least one special character

[\s\S]{6,16}      --> total length between 6 and 16

$                 --> end of string