我不知道如何修改我的正則運算式以確保密碼符合最后一個條件:
- 至少連續 2 個大寫字母
- 沒有空格符號
- 包含數字
- 不包含 4 個連續數字
{4} 如果密碼有 4 位或更多位,它目前會拒絕密碼,但我需要它來拒絕恰好有 4 位數字的密碼。
s1 = 'annII#443'
s2 = 'annII#4343'
s3 = 'annII#43434'
pattern = r"^(?=.*[A-Z]{2,})(?=.*[A-Za-z])(?=.*[0-9])(?!.*[0-9]{4})(?!.*[\s]).*$"
re.findall(pattern, s1) # ['aШnnII#443']
re.findall(pattern, s2) # []
re.findall(pattern, s3) # []
PS:這只是一個任務,所以不要擔心。它不會用于任何實際目的。
uj5u.com熱心網友回復:
- 要恰好匹配四位數字,您可以使用 at開頭
^,例如(?!(?:.*\D)?\d{4}(?!\d)).
這需要在 4 位數字之前開始或非數字,并且不允許在之后的數字。\D (?=.*[A-Za-z])(?=.*[A-Z]{2,})如果您已經需要(2 個上部),則看起來多余。{2,}兩個或更多是多余的。{2}就足夠了,不會改變邏輯。- 而不是
(?!.*[\s]).*$你可以只使用\S*$(upper matches non-whitespaces )。 - 在可能的情況下使用惰性
.*?類甚至否定類通常更有效。
^(?=[^A-Z]*[A-Z]{2})(?=\D*\d)(?!(?:.*\D)?\d{4}(?!\d))\S*$
請參閱 regex101 上的此演示(添加\n到多行演示中的否定以保持一致)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537806.html
上一篇:如何在Moment.js中僅啟用/驗證從當前日期到50年前的日期輸入?
下一篇:如何檢查是否有過期產品
