Javascript 在不满足正则表达式的情况下准确获取密码
我对正则表达式有如下的关注Javascript 在不满足正则表达式的情况下准确获取密码,javascript,jquery,regex,Javascript,Jquery,Regex,我对正则表达式有如下的关注 /^(?=^.{8,}$)(?=.*[0-9])(?=.+[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;>.<;,]).{1,}$/ 我已将此正则表达式用于密码策略,即如下所示 /^(?=^.{8,}$)(?=.*[0-9])(?=.+[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;>.&am
/^(?=^.{8,}$)(?=.*[0-9])(?=.+[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;>.<;,]).{1,}$/
我已将此正则表达式用于密码策略,即如下所示
/^(?=^.{8,}$)(?=.*[0-9])(?=.+[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;>.<;,]).{1,}$/
- 至少1个大写字符[A-Z]
- 至少1个小写字符[a-z]
- 至少1个特殊字符[!@$%^]
- 至少1位数字[0-9]
- 最少8个字符
在这些示例中,我没有应用任何特殊字符,而是满足正则表达式。我注意到您没有在正则表达式中的保留字符之前使用“\”。 例如:
()
都是保留的,因此在正则表达式中它们前面需要一个\
而且不需要使用{1,}$
这可能会解决这个问题,尽管我没有使用您需要的所有特殊字符
/^(?=.[A-Z])(?=.[A-Z])(?=.[0-9])(?=.[!@\$%\^&*])(?=.{8,})/
我注意到在正则表达式中的保留字符之前没有使用“\”。
例如:()
都是保留的,因此在正则表达式中它们前面需要一个\
而且不需要使用{1,}$
这可能会解决这个问题,尽管我没有使用您需要的所有特殊字符
/^(?=.[A-Z])(?=.[A-Z])(?=.[0-9])(?=.[!@$%^&*])(?=.{8,})/
我知道这并不能回答你的实际问题,但其他人已经回答了,所以我想我还是会分享我的想法
在我看来,像这样的单个正则表达式有一些缺点,很难读取和调试。此外,也无法判断哪些规则实际导致检查失败。
你可以考虑把它分解成更小的检查,这也会很容易在以后添加额外的规则。
<?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";
};
我知道这并不能回答你的实际问题,但其他人已经回答了,所以我想我还是会分享我的想法
在我看来,像这样的单个正则表达式有一些缺点,很难读取和调试。此外,也无法判断哪些规则实际导致检查失败。
你可以考虑把它分解成更小的检查,这也会很容易在以后添加额外的规则。
<?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";
};
我想你的正则表达式被一个HTML转义器击中了&表示“a”或“m”或。。。。etc@zzxyz我也尝试过删除这个,但仍然不起作用。我想你的正则表达式被一个HTML转义器击中了&表示“a”或“m”或。。。。etc@zzxyz我也尝试过删除这个,但仍然不起作用。我认为它们不需要在[]@Boo内转义。它对我起作用。你能告诉我,在你建议的代码中,由于不允许空间或空间,我需要做哪些更改吗tab@NaveenK.Sanadhya很抱歉回复晚了。但是为了避免空白,在正则表达式的末尾添加\S*$
,所以:/^(?=.[A-Z])(?=.[A-Z])(?=.[0-9])(?=.[!@\$%\^&*])(?=.{8,})\S*$/
@zzxyz在我的浏览器控制台中它对我不起作用,因为一些奇怪的原因:/所以我只是认为这可能是原因。我不认为它们需要在[@Boo里面转义它对我起作用,你能告诉我,在你建议的代码中,我需要做哪些修改,以避免出现空格或空格吗tab@NaveenK.Sanadhya很抱歉回复晚了。但是为了避免空白,在正则表达式的末尾添加\S*$
,所以:/^(?=.[A-Z])(?=.[A-Z])(?=.[0-9])(?=.[!@.\$%\^&*])(?=.{8,})\S*$/
@zzxyz在我的浏览器控制台中它对我不起作用,因为一些奇怪的原因:/所以我只是认为这可能是原因。你甚至可以给每个正则表达式起一个名字,给每个字段一个正确的数组,让一个函数执行所有验证您甚至可以给每个正则表达式一个名称,给每个字段一个正确的数组,让一个函数执行所有验证