Regex用于我的密码验证
本文关键字:验证 密码 我的 用于 Regex | 更新日期: 2023-09-27 18:27:19
我的密码格式需要一个正则表达式。它必须确保密码只包含字母a-z、数字0-9和特殊字符:.@#$%&。我使用的是.NET C#编程语言。这是我的代码:
Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]$");
if (!userAndPassPattern.IsMatch(username) || !userAndPassPattern.IsMatch(password))
return false;
问题是我总是得到错误的回复。
!A || !B
在逻辑上等价于!(A && B)
所以你可以写更好的
!(userAndPassPattern.IsMatch(username) && userAndPassPattern.IsMatch(password))
那么你的角色类中有一个特殊的角色$
,也许你需要屏蔽它'$
我对此不太确定,因为在角色类中,它不是一个特殊的角色。也许这取决于使用中的RegEx引擎。如果你屏蔽$,它应该不会造成伤害([a-z0-9.@#'$%&]
)
那么你只有一个字符可以匹配。你需要一个量词
[a-z0-9.@#$%&]
表示给定字符中的一个字符,将与a
、b
或0
匹配,但与ab
不匹配[a-z0-9.@#$%&]+
给定字符中的许多字符,从1到无尽的出现,将与a
、b
、ab
和ba
等匹配。
编辑
这就是你想要的
Regex userAndPassPattern = new Regex("^[a-z0-9'.@#'$%&]+$");
if (!(userAndPassPattern.IsMatch(username) && userAndPassPattern.IsMatch(password))) {
return false;
}
您忘记添加一次或多次匹配的"+":
Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]+$");
此代码Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]$");
将只匹配一个字符长的用户名或密码。
您正在寻找类似这样的Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]+$");
,它将与您的类中的一个或多个字符相匹配。+
符号告诉它匹配一个或多个前一个原子(在本例中是在方括号中指定的字符类)
此外,如果您无意将匹配限制为小写字符,则应将"A-Z"添加到字符类Regex userAndPassPattern = new Regex("^[A-Za-z0-9.@#$%&]$");
中
您可能还想要实现最小长度限制,这可以通过用{n,}
构造替换+
来实现,其中n
是您想要匹配的最小长度。例如:
这将匹配至少6个字符的
Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]{6,}$");
这将匹配最小值为6和最大值为12的
Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]{6,12}$");
您有两个问题。第一和美元需要逃脱。其次,您只匹配了一个字符。在最后一个$:之前添加一个+
^[a-z0-9'.@#'$%&]+$
编辑:另一个建议是,如果你有一个最小/最大长度,你可以用{6,16}或你认为合适的任何词来代替+。这将匹配包含6到16个字符的字符串,并拒绝任何更短或更长的字符串。如果你不在乎上限,你可以使用{6,}。
在使用regex转义序列时,您是否尝试过使用逐字逐句的字符串文字?
Regex userAndPassPattern = new Regex(@"^[a-z0-9@#'$%&]+$");
if (!userAndPassPattern.IsMatch(username) || !userAndPassPattern.IsMatch(password))
return false;
您的模式只允许一个字符集,您可能想要一个类似*
、+
或{10,}
的重复运算符。
您的角色集包括.
,它匹配任何角色,击败了角色类的对象。如果您想匹配"."
,则需要使用'.
进行转义