![](/img/trans.png)
[英]Regular expression to check if a given password contains at least one number and one letter in c#?
[英]Check if string contains at least one of each: lowercase letter, uppercase letter, number, and special character
我已经搜索过 SO 和 Google,我发现的大多数示例似乎都没有按预期工作(或者没有结合所有这些元素)。 我正在尝试创建一个 Regex 表达式,该表达式匹配(通过)如果字符串在字符串中的任何位置至少包含以下一项,并且如果缺少其中任何一项则失败:
这是我尝试过的:
if (System.Text.RegularExpressions.Regex.IsMatch(txtTest.Text.Trim(), "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?^[a-zA-Z0-9_@.-]).{8,}$"))
{
lblMsg.Text = "Pass";
}
else
{
lblMsg.Text = "Fail";
}
问题是这没有按预期工作。 当它们应该失败时的以下通过(它们没有特殊字符):
它似乎可以很好地检测除特殊字符之外的所有字符。 我做错了什么,我该如何解决?
使用以下更改(?=.*?^[a-zA-Z0-9_@.-])
:
+ see here
(?=.*?[^a-zA-Z0-9_@.-])
^^ i kept the dot, hyphen, etc as you used, if you don't need, remove.
在这个正则表达式中,字符类[]
的^
否定字符。 你快到了,只是不幸的是你把它放在[]
之外
虽然有很多方法可以给这只猫剥皮,但我更喜欢将这些代码包装到可重用的扩展方法中,这样以后的工作就变得微不足道了。 使用扩展方法时,您还可以避免使用 RegEx,因为它比直接字符检查慢。 我喜欢使用 Extensions.cs NuGet 包中的扩展。 它使这项检查变得如此简单:
using Extensions;
”添加到代码的顶部。"Smith23@".IsStrong()
将返回 True 而"Smith23".IsStrong()
将返回 False。MyString.IsStrong()
。 默认情况下.IsStrong()
验证所有 4 个组件都用于强字符串,但如果您只想使用 4 个组件中的 3 个,您可以像这样MyString.IsStrong(3)
那样做。您的示例代码将变得如此简单:
using Extensions;
//if (System.Text.RegularExpressions.Regex.IsMatch(txtTest.Text.Trim(), "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?^[a-zA-Z0-9_@.-]).{8,}$"))
if (txtTest.Text.Trim().IsStrong())
{
lblMsg.Text = "Pass";
}
else
{
lblMsg.Text = "Fail";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.