1

我目前已经设置了一个正则表达式来验证我的密码:

/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*\W).{6,}$/

这将检查至少 1 个大写和小写字符、1 个数字、1 个特殊字符/非单词字符以及最少 6 个字符。

我现在将我所有的验证规则移植到Respect Validation。我的大部分设置都很好,但密码验证有困难。

我知道regex方法:

Validator::regex('/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*\W).{6,}$/')->setName('Password');

但这会返回如下错误消息:

Password must validate against "/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*\W).{6,}$/"

我想将方法​​链接在一起,以便在验证链中设置每个规则。因此,如果您缺少一个数字,它会返回类似“密码必须包含至少 1 个数字”之类的信息,如果您缺少大写字符,它会返回“密码必须包含至少 1 个大写字符”等等。

我认为可以使用该allOff方法来完成,您可以设置单个规则,如果所有内部规则都通过,则这些规则将全局通过。

作为测试,我尝试检测字符串是否包含数字和字母字符,如下所示:

Validator::allOf(Validator::digit(), Validator::alpha())->setName('Password');

结果:

$password = 'test'; // Password must contain only digits (0-9)
$password = '1234'; // Password must contain only letters (a-z)
$password = 'test1234' // Password must contain only digits (0-9)

regex现在看它,我得到这些错误的原因是完全有道理的,但是如果没有该方法,我看不出如何做到这一点。我所追求的可能是regex在这种情况下最好使用该方法吗,我已经浏览了几次规则列表,但我可能错过了我所追求的那个,因为有很多。

任何帮助表示赞赏。

4

0 回答 0