![](/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.