GG資源網

正則表達式:密碼必須至少包含八個字元、至少包含一個數字、小寫和大寫的字母以及特殊字元

問題描述:

我需要一個正則表達式來檢查密碼:
密碼至少包含八個字元、至少包含一個數字、同時包含小寫字母和大寫字母以及特殊字元,例如#,?,!)
不能是舊密碼或包含用戶名,"password"或"websitename"
這裡是我的驗證表達式,用於限制:八個字元,包括一個大寫字母,一個小寫字母和一個數字或特殊字元。
(?=^.{8,}$)((?=.\\d)|(?=.\\W+))(?![.\\n])(?=.[A-Z])(?=.[a-z]).*$"
那麼,如何寫一個正則,限制密碼必須是八個字元,包括一個大寫字母,一個特殊字元和字母數字字元?

網友觀點:

^(?=.?[A-Z])(?=(.[a-z]){1,})(?=(.[\\d]){1,})(?=(.[\\W]){1,})(?!.*\\s).{8,}$
規則:
至少一個大寫英文字母
至少一個小寫英文字母
至少一位數字
至少一個特殊字元
最少八個字元

正則表達式是什麼呢?正則表達式怎麼用?

一、什麼是正則表達式
正則表達式是一種特殊的字元串模式,用於匹配一組字元串,就好比用模具做產品,而正則就是這個模具,定義一種規則去匹配符合規則的字元。
注意:正則表達式中並不提供關於數學的任何功能,所以只能使用冗長的分組,選擇,字元類來描述
二、普通字元
大多數的字元僅能夠描述它們本身,這些字元稱作普通字元,例如所有的字母和數字。
也就是說普通字元只能夠匹配字元串中與它們相同的字元。

三:常用的元字元
由於普通字元只能匹配與自身相同的字元,那麼正則表達式的靈活性和強大的匹配功能就不能完全展現,於是正則表達式中規定了一系列的特殊字元,這些字元不是按照字元的直接量進行匹配的,而是具有特殊的語義,

代碼 說明
. 匹配除換行符以外的任意字元
\\w 匹配字母或數字或下劃線或漢字
\\s 匹配任意的空白符
\\d 匹配數字
\\b 匹配單詞的開始或結束
^ 匹配字元串的開始
$ 匹配字元串的結束

雖然說上面的字元具有特殊含義,但是一些字元只有在某些上下文環境中才具有特殊的含義。
由於它們是構造各種匹配複雜文本的正則表達式的基本字元,所以被稱作元字元

\\b ^ $的區別
\\b一般指單詞邊界(空格、空行、標點、tab、行首字、行尾等都算),如「a java program」中java兩邊都是空格,就可以匹配上。
^ $是字元串的首尾,一般一行是一個字元串的話,就是行首 行尾
比如用\\bjava\\b和^java$的兩個正則嘗試匹配字元串
java is the best language in the world
的話, \\bjava\\b 可以匹配到 java, 而 ^java$ 則無法匹配成功

四:轉義字元 \\
如果你想查找元字元本身的話,比如你查找.,或者*,就出現了問題:你沒辦法指定它們,因為它們會被解釋成別的意思。這時你就得使用\\來取消這些字元的特殊意義。因此,你應該使用\\.和\\*。當然,要查找\\本身,你也得用\\\\.
例如:deerchao\\.net匹配deerchao.net,C:\\\\Windows匹配C:\\Windows
五:重複匹配
定符,指定數量的代碼

代碼/語法 說明
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次

Windows\\d+匹配Windows後面跟1個或更多數字
^\\w+匹配一行的第一個單詞(或整個字元串的第一個單詞,具體匹配哪個意思得看選項設置)

六:字元類
匹配沒有預定義元字元的字符集合(比如母音字母a,e,i,o,u), 只需要在方括弧里列出它們就行了
例:
[aeiou]就匹配任何一個英文母音字母
[.?!]匹配標點符號(.或?或!)
[0-9]代表的含意與\\d就是完全一致的:一位數字
[a-z0-9A-Z_]也完全等同於\\w(如果只考慮英文的話)。

七:分枝條件 |
用|把不同的規則分隔開,相當於或的關係
例:
\\d{5}-\\d{4}|\\d{5} :這個表達式用於匹配美國的郵政編碼。美國郵編的規則是5位數字,或者用連字號間隔的9位數字。之所以要給出這個例子是因為它能說明一個問題:使用分枝條件時,要注意各個條件的順序。如果你把它改成\\d{5}|\\d{5}-\\d{4}的話,那麼就只會匹配5位的郵編(以及9位郵編的前5位)。原因是匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。

八:反義
有時需要查找不屬於某個能簡單定義的字元類的字元。比如想查找除了數字以外,其它任意字字元都行的情況,這時需要用到反義:

代碼/語法 說明
\\W 匹配任意不是字母,數字,下劃線,漢字的字元
\\S 匹配任意不是空白符的字元
\\D 匹配任意非數字的字元
\\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字元
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字元

例子:\\S+匹配不包含空白符的字元串。
<a[^>]+>匹配用尖括弧括起來的以a開頭的字元串
九:分組
但如果想要重複多個字元又該怎麼辦?你可以用小括弧來指定分組(子表達式),然後你就可以指定這個子表達式的重複次數了
例:
(\\d{1,3}\\.){3}\\d{1,3} 要理解這個表達式,請按下列順序分析它:
\\d{1,3}匹配1到3位的數字,(\\d{1,3}\\.){3}匹配三位數字加上一個英文句號(這個整體也就是這個分組)重複3次,最後再加上一個一到三位的數字(\\d{1,3})。如:192.168.123.222
使用小括弧的時候,還有很多特定用途的語法。下面列出了最常用的一些:

分類 代碼/語法 說明
捕獲 (exp) 匹配exp,並捕獲文本到自動命名的組裡
(?<name>exp) 匹配exp,並捕獲文本到名稱為name的組裡,也可以寫成(?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號
零寬斷言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp後面的位置
(?!exp) 匹配後面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注釋 (?#comment) 這種類型的分組不對正則表達式的處理產生任何影響,用於提供注釋讓人閱讀

十:後項引用

後向引用用於重複搜索前面某個分組(子表達式)匹配的文本。
默認情況下,每個分組會自動擁有一個組號
規則是:從左向右,以分組的左括弧為標誌,第一個出現的分組的組號為1,第二個為2,以此類推。
例:
\\b(\\w+)\\b\\s+\\1\\b可以用來匹配重複的單詞,像go go, 或者kitty kitty
這個表達式首先匹配一個單詞,也就是單詞開始處和結束處之間的多於一個的字母或數字 \\b(\\w+)\\b,這個單詞會被捕獲到編號為1的分組中,然後是1個或幾個空白符(\\s+),最後是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\\1)。
注意:

  • 分組0對應整個正則表達式
  • 實際上組號分配過程是要從左向右掃描兩遍的:第一遍只給未命名組分配,第二遍只給命名組分配--因此所有命名組的組號都大於未命名的組號
  • 你可以使用(?:exp)這樣的語法來剝奪一個分組對組號分配的參與權.

你也可以自己指定子表達式的組名。要指定一個子表達式的組名,請使用這樣的語法:(?<Word>\\w+)(或者把尖括弧換成'也行:(?'Word'\\w+)),這樣就把\\w+的組名指定為Word了。要反向引用這個分組捕獲的內容,你可以使用\\k<Word>.
所以上一個例子也可以寫成這樣:

由於網站搬家,部分鏈接失效,如無法下載,請聯繫站長!謝謝支持!
1. 帶 [親測] 說明源碼已經被站長親測過!
2. 下載後的源碼請在24小時內刪除,僅供學慣用途!
3. 分享目的僅供大家學習和交流,請不要用於商業用途!
4. 本站資源售價只是贊助,收取費用僅維持本站的日常運營所需!
5. 本站所有資源來源於站長上傳和網路,如有侵權請郵件聯繫站長!
6. 沒帶 [親測] 代表站長時間緊促,站長會保持每天更新 [親測] 源碼 !
7. 盜版ripro用戶購買ripro美化無擔保,若設置不成功/不生效我們不支持退款!
8. 本站提供的源碼、模板、插件等等其他資源,都不包含技術服務請大家諒解!
9. 如果你也有好源碼或者教程,可以到審核區發布,分享有金幣獎勵和額外收入!
10.如果您購買了某個產品,而我們還沒來得及更新,請聯繫站長或留言催更,謝謝理解 !
GG資源網 » 正則表達式:密碼必須至少包含八個字元、至少包含一個數字、小寫和大寫的字母以及特殊字元

發表回復

CAPTCHAis initialing...