簡體   English   中英

正則表達式:可選的特殊字符

[英]Regex: Optional special characters

我有一個正則表達式,它具有以下規則:

+ Must contain lower case letters
+ Must contain upper case letters
+ Must contain a number
+ Must contain a (defined)special character
+ At least 8 chars

這有效,我的正則表達式如下所示:

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#\$%\^&\*_\-\+=`|{}:;!\.\?\"()\[\]]).{8,25})

現在我只想在一件事情上改變這個正則表達式:特殊字符應該仍然是可能的(並且只有我允許的那些),但應該是可選的(不再需要)字符串中的任何地方。 所以新規則是

+ MAY contain (defined) special characters

我必須改變什么才能實現這一目標?

例子:

NicePassw0rd - NOT OK now, should be
NicePassw0rd%% - OK now (and still should be)
NicePassword - NOT OK now and shouldnt

您可以在那里測試我的正則表達式: https : //regex101.com/r/qN5dN0/1

您必須在模式的兩端添加錨點^$才能真正啟用長度檢查。 如果要禁止其他特殊字符,請將~@#$%^&*+=`|{}:;!.?\\"()\\[\\]-到帶有字母和數字的消耗部分(注意[A-Za-z0-9_]\\w相同,如果您使用沒有/u標志的 PCRE):

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25}$

正則表達式演示

這是它的作用:

  • ^ - 字符串的開始
  • (?=.*\\d) - 至少需要一位數字
  • (?=.*[az]) - 至少需要一個小寫的 ASCII 字母
  • (?=.*[AZ]) - 至少需要 1 個 ASCII 大寫字母
  • [\\w~@#$%^&*+=`|{}:;!.?\\"()\\[\\]-]{8,25} - 僅匹配(=消耗)8 到 25 個符號字母數字或_ ,或字符類中的所有字符
  • $ - 字符串結尾

當我們檢查 0 個或更多字符而不是需要檢查存在性和所需符號的字符時,基於前瞻中的對比原理的正則表達式將更有效。 查看包含(?=\\D*\\d)(?=[^az]*[az])(?=[^AZ]*[AZ])的更正正則表達式:

^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[\w~@#$%^&*+=`|{}:;!.?\"()\[\]-]{8,25}$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM