我的密码格式需要正则表达式。它必须确保密码只包含字母a-z,数字0-9和特殊字符:。@#$%&。 我使用的是.NET C#编程语言。 这是我的代码:
Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]$");
if (!userAndPassPattern.IsMatch(username) || !userAndPassPattern.IsMatch(password))
return false;
问题是我总是假装回来。
答案 0 :(得分:3)
!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;
}
答案 1 :(得分:2)
您忘了添加'+'进行一次或多次匹配:
Regex userAndPassPattern = new Regex("^[a-z0-9.@#$%&]+$");
答案 2 :(得分:1)
此代码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}$");
答案 3 :(得分:1)
你有两个问题。首先和$需要被转义。其次,你只匹配1个字符。在最后一个$:
之前添加一个+^[a-z0-9\.@#\$%&]+$
编辑:另一个建议,如果您有最小/最大长度,您可以将+替换为{6,16}或您认为合适的任何内容。这将匹配6到16个字符的字符串,并拒绝任何更短或更长的字符串。如果您不关心上限,可以使用{6,}。
答案 4 :(得分:0)
在使用正则表达式转义序列时,您是否尝试过使用逐字字符串文字?
Regex userAndPassPattern = new Regex(@"^[a-z0-9@#\$%&]+$");
if (!userAndPassPattern.IsMatch(username) || !userAndPassPattern.IsMatch(password))
return false;
您的模式只允许单character set个repetition operator,例如*
+
或{10,}
。
你的character set包括.
,它匹配任何角色,击败角色类的对象。如果您想匹配"."
,则需要使用\.