關於常用的正則表達式的分享

  • 2020 年 3 月 12 日
  • 筆記

一、定義

  1.正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。

  2.正則表達式,是一個強大且高效的文本處理工具。通常情況下,通過一段表達準確的表達式,能夠非常簡短、快速的實現複雜業務邏輯。因此,正則表達式通常是一個成熟開發人員的標配,可以輔助實現開發效率的極強提升。

正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為「元字符」))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。

二、實現

在需要實現校驗字段、字符串等內容時,通常就可以通過正則表達式實現:

1.校驗密碼強度

密碼的強度必須是包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間。

2.校驗中文

字符串僅能是中文。

3.由數字、26個英文字母或下劃線組成的字符串

4.校驗E-Mail地址

同密碼一樣,下面是E-mail地址合規性的正則檢查語句。

5.校驗身份證號碼

下面是身份證號碼的正則校驗。15 或 18位。

6.校驗日期

「yyyy-mm-dd「 格式的日期校驗,已考慮平閏年。

7.校驗金額

金額校驗,精確到2位小數。

8.校驗手機號碼

下面是國內 13、15、18開頭的手機號正則表達式。(可根據目前國內收集號擴展前兩位開頭號碼)

9.判斷IE版本

IE目前還沒被完全取代,很多頁面還是需要做版本兼容,下面是IE版本檢查的表達式。

10.校驗IP-V4地址

11.校驗IP-V6地址

12.檢查URL的前綴

應用開發中很多時候需要區分請求是HTTPS還是HTTP,通過下面的表達式可以取出一個url的前綴然後再邏輯判斷。

13.提取URL鏈接

下面的這個表達式可以篩選出一段文本中的URL。

14.文件路徑及擴展名校驗

驗證windows下文件路徑和擴展名(下面的例子中為.txt文件),如果是別的擴展名可以修改.txt的值。

15.提取Color Hex Codes

有時需要抽取網頁中的顏色代碼,可以使用下面的表達式。

16.提取網頁圖片

假若你想提取網頁中所有圖片信息,可以利用下面的表達式。

17.提取頁面超鏈接

提取html中的超鏈接。

18.查找CSS屬性

通過下面的表達式,可以搜索到相匹配的CSS屬性。

19.抽取注釋

如果你需要移除HMTL中的注釋,可以使用如下的表達式。

20.匹配HTML標籤

通過下面的表達式可以匹配出HTML中的標籤屬性。

一、校驗數字的表達式

  • 數字:^[0-9]*$
  • n位的數字:^d{n}$
  • 至少n位的數字:^d{n,}$
  • m-n位的數字:^d{m,n}$
  • 零和非零開頭的數字:^(0|[1-9][0-9]*)$
  • 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
  • 帶1-2位小數的正數或負數:^(-)?d+(.d{1,2})$
  • 正數、負數、和小數:^(-|+)?d+(.d+)?$
  • 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
  • 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
  • 非零的正整數:^[1-9]d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^+?[1-9][0-9]*$
  • 非零的負整數:^-[1-9][]0-9"*$ 或 ^-[1-9]d*$
  • 非負整數:^d+$ 或 ^[1-9]d*|0$
  • 非正整數:^-[1-9]d*|0$ 或 ^((-d+)|(0+))$
  • 非負浮點數:^d+(.d+)?$ 或 ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
  • 非正浮點數:^((-d+(.d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
  • 正浮點數:^[1-9]d*.d*|0.d*[1-9]d*$ 或 ^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$
  • 負浮點數:^-([1-9]d*.d*|0.d*[1-9]d*)$ 或 ^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  • 浮點數:^(-?d+)(.d+)?$ 或 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$

二、校驗字符的表達式

  • 漢字:^[u4e00-u9fa5]{0,}$
  • 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
  • 長度為3-20的所有字符:^.{3,20}$
  • 由26個英文字母組成的字符串:^[A-Za-z]+$
  • 由26個大寫英文字母組成的字符串:^[A-Z]+$
  • 由26個小寫英文字母組成的字符串:^[a-z]+$
  • 由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
  • 由數字、26個英文字母或者下劃線組成的字符串:^w+$ 或 ^w{3,20}$
  • 中文、英文、數字包括下劃線:^[u4E00-u9FA5A-Za-z0-9_]+$
  • 中文、英文、數字但不包括下劃線等符號:^[u4E00-u9FA5A-Za-z0-9]+$ 或 ^[u4E00-u9FA5A-Za-z0-9]{2,20}$
  • 可以輸入含有^%&',;=?$"等字符:[^%&',;=?$x22]+
  • 禁止輸入含有~的字符:[^~x22]+

三、特殊需求表達式

  • Email地址:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  • InternetURL:[a-zA-z]+://[^s]* 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
  • 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$
  • 電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^((d{3,4}-)|d{3.4}-)?d{7,8}$
  • 國內電話號碼(0511-4405222、021-87888822):d{3}-d{8}|d{4}-d{7}
  • 電話號碼正則表達式(支持手機號碼,3-4位區號,7-8位直播號碼,1-4位分機號): ((d{11})|^((d{7,8})|(d{4}|d{3})-(d{7,8})|(d{4}|d{3})-(d{7,8})-(d{4}|d{3}|d{2}|d{1})|(d{7,8})-(d{4}|d{3}|d{2}|d{1}))$)
  • 身份證號(15位、18位數字),最後一位是校驗位,可能為數字或字符X:(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)
  • 帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  • 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]w{5,17}$
  • 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在 8-10 之間):^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
  • 強密碼(必須包含大小寫字母和數字的組合,可以使用特殊字符,長度在8-10之間):^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
  • 日期格式:^d{4}-d{1,2}-d{1,2}
  • 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
  • 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
  • 錢的輸入格式:
    1. 有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
    2. 這表示任意一個不以0開頭的數字,但是,這也意味着一個字符"0"不通過,所以我們採用下面的形式:^(0|[1-9][0-9]*)$
    3. 一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號:^(0|-?[1-9][0-9]*)$
    4. 這表示一個0或者一個可能為負的開頭不為0的數字.讓用戶以0開頭好了.把負號的也去掉,因為錢總不能是負的吧。下面我們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$
    5. 必須說明的是,小數點後面至少應該有1位數,所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:^[0-9]+(.[0-9]{2})?$
    6. 這樣我們規定小數點後面必須有兩位,如果你認為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$
    7. 這樣就允許用戶只寫一位小數.下面我們該考慮數字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
    8. 1到3個數字,後面跟着任意個 逗號+3個數字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
    9. 備註:這就是最終結果了,別忘了"+"可以用"*"替代如果你覺得空字符串也可以接受的話(奇怪,為什麼?)最後,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這裡
  • xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
  • 中文字符的正則表達式:[u4e00-u9fa5]
  • 雙位元組字符:[^x00-xff] (包括漢字在內,可以用來計算字符串的長度(一個雙位元組字符長度計2,ASCII字符計1))
  • 空白行的正則表達式:ns*r (可以用來刪除空白行)
  • HTML標記的正則表達式:<(S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正則表達式:^s*|s*$或(^s*)|(s*$) (可以用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),非常有用的表達式)
  • 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)
  • 中國郵政編碼:[1-9]d{5}(?!d) (中國郵政編碼為6位數字)
  • IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

上文很多事摘錄的,大部分已經測試過沒有問題。

具體教程可以到這裡https://www.runoob.com/regexp/regexp-tutorial.html學習。

ok,今天的關於正則的分享就到這裡,有不錯的歡迎留言提出!!!