我必須寫的正則表達式來檢查,如果字符串:正則表達式複雜圖案
- 長度爲5-15個字符長
- 具有至少2個大寫字母
- 具有至少2個小寫字母
- 並有1位數字
我欣賞任何幫助,因爲我真的堅持這一點,並沒有任何想法如何解決這個問題。
我必須寫的正則表達式來檢查,如果字符串:正則表達式複雜圖案
我欣賞任何幫助,因爲我真的堅持這一點,並沒有任何想法如何解決這個問題。
您可以使用向前看檢查所有條件,然後匹配5至15個字符(任何),確保沒有別的(^
和$
):
^(?=(?:.*[A-Z]){2})(?=(?:.*[a-z]){2})(?=.*\d).{5,15}$
^
:字符串開頭(?= )
:積極展望未來。不抓住任何字符,但只是看向前看,如果模式將匹配(?: )
:使該組無法捕獲,即你不會得到它作爲捕獲組,您可以參考$1
或\1
(語言依賴性).*[A-Z]
:0或更多字符(S),隨後由大寫字母.*[a-z]
:0或更多字符(S),接着是小寫字母.*\d
:0或更多字符(S),隨後由一個數字{2}
:p上一圖案必須匹配兩次.{5-15}
:5至15個字符。$
:字符串的結尾在JavaScript中,你可以測試一個字符串中的正則表達式與test
,例如:
var regex = /^(?=(?:.*[A-Z]){2})(?=(?:.*[a-z]){2})(?=.*\d).{5,15}$/;
console.log(regex.test('a9B1c')); // false, missing capital letter
console.log(regex.test('a9B1cD')); // true
trinctot是正確的第一次,但取決於誰在使用你的代碼和什麼,這可能更容易維護/修改:
var lowerPass = 2 <= (string.match(/[a-z]/g) || []).length;
var upperPass = 2 <= (string.match(/[A-Z]/g) || []).length;
var digitPass = 1 <= (string.match(/[0-9]/g) || []).length;
var lengthPass = 5 <= string.length <= 15;
var stringPass = lowerPass + upperPass + digitPass + lengthPass == 4;
謝謝,我最近開始使用正則表達式,從未聽過或用過前瞻。 –