我对正则表达式感到担忧,详情如下
/^(?=^.{8,}$)(?=.*[0-9])(?=.+[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;>.<;,]).{1,}$/
我已将此正则表达式用于密码策略,即如下
但是,每当我对其进行测试时,模式都会出错。例如,在这样的输入中,例如
例如:
James1234
jam123Es
1234James
1234jaMeS
在这些示例中,我没有应用任何特殊字符,而是让它满足了正则表达式。
答案 0 :(得分:3)
我知道这不能回答您的实际问题,但是其他人已经回答了,所以我想我还是会分享我的想法。
我认为像这样的单个正则表达式有一些缺点,很难读取和调试。同样,也无法分辨出哪些规则实际上使检查失败。 您可以考虑将其细分为较小的支票,这也将使以后轻松添加其他规则变得容易。
<?php
$check = function (string $p): string
{
if (strlen($p) < 8) {
return "Not long enough";
}
if (!preg_match('/[A-Z]/', $p)) {
return "No upper case character";
}
if (!preg_match('/[a-z]/', $p)) {
return "No lower case character";
}
if (!preg_match('/\d/', $p)) {
return "No digits";
}
if (!preg_match('/[!@#$%^]/', $p)) {
return "No special character";
}
return "OK";
};
答案 1 :(得分:0)
我注意到您在正则表达式中的保留字符之前没有使用'\'。
例如:private async void test3()
{
FirebaseResponse resp = await client.GetTaskAsync("serverStats/1");
Data get = resp.ResultAs<Data>();
Logger.WriteLog("test_log.txt", "test3 serverName=" + get.serverName + " serverStatus=" + get.serverStatus);
}
已全部保留,因此在正则表达式中需要( )
之前。
并且不需要使用\
。
尽管我没有使用您需要的所有特殊字符,但这也许可以解决问题。
.{1,}$