gpt4 book ai didi

c++ - 没有特殊字符的密码验证器

转载 作者:太空狗 更新时间:2023-10-29 19:46:02 25 4
gpt4 key购买 nike

我是 RegEx 的新手,已经进行了大量搜索,但没有找到任何具体内容。

我正在编写一个验证密码字符串的正则表达式。可接受的字符串必须至少包含 4 种字符类型中的 3 种:数字、小写字母、大写字母、特殊字符 [<+$*)],但不得包含另一组特殊字符 (|;{})。

我对包含有一个想法(也就是说它是否是正确的方法)。

看起来像这样:

^((a-z | A-Z |\d)(a-z|A-Z|[<+$*])(a-z|[<+$*]|\d)(A-Z|[<+$*]|\d)).*$

如何确保用户不输入特殊字符(|;{})这是我用排除字符串尝试的:

^(?:(?![|;{}]).)*$

我尝试了一些技巧将两者结合在一个正则表达式中,但无法让它工作。

关于如何正确执行此操作的任何意见?

最佳答案

不要尝试在一个正则表达式中完成所有操作。进行两次不同的检查。

假设您正在使用 Perl(因为您没有指定语言):

$valid_pw =
( $pw =~ /^((a-z | A-Z |\d)(a-z|A-Z|[<+$*])(a-z|[<+$*]|\d)(A-Z|[<+$*]|\d)).*$/ ) &&
( $pw !~ /\|;{}/ );

您是说“如果 PW 匹配所有包含规则,并且 PW 不匹配任何排除的字符,则密码有效。”

看看这比@Jerry 上面的回复更清晰:

^(?![^a-zA-Z]*$|[^a-z0-9]*$|[^a-z<+$*]*$|[^A-Z0-9]*$|[^A-Z<+$*]*$|[^0-9<+$*]*$|.*[|;{}]).*$

我不怀疑 Jerry 的版本有效,但你想维护哪个版本?

事实上,你可以进一步分解它并且非常清楚:

my $cases_matched = 0;
$cases_matched++ if ( $pw =~ /\d/ ); # digits
$cases_matched++ if ( $pw =~ /[a-z]/ ); # lowercase
$cases_matched++ if ( $pw =~ /[A-Z]/ ); # uppercase
$cases_matched++ if ( $pw =~ /<\+\$\*/ ); # special characters

my $is_valid = ($cases_matched >= 3) && ($pw !~ /\|;{}/); # At least 3, and none forbidden.

当然,这会占用 6 行而不是一行,但在一年后当您返回并必须添加新规则,或者弄清楚代码的作用时,您会很高兴自己是这样写的。

仅仅因为您可以在一个正则表达式中做到这一点并不意味着您应该

关于c++ - 没有特殊字符的密码验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18621491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com