關於正則表達式

正則表達式的特色是:正則表達式

1. 靈活性、邏輯性和功能性很是的強;編碼

2. 能夠迅速地用極簡單的方式達到字符串的複雜控制。spa

 

1 正則表達式基本語法xml


兩個特殊的符號^和$。他們的做用是分別指出一個字符串的開始和結束。例子以下:字符串

  • ^The:表示全部以」The」開始的字符串(」There」,」The cat」等);
  • of all$:表示因此以」of all」結尾的字符串;
  • ^abc$:表示開始和結尾都是」abc」的字符串;
  • note:表示任何包含」note」的字符串。

像最後那個例子,若是你不使用兩個特殊字符,你就在表示要查找的串在被查找串的任意部分——你並不把它定位在某一個頂端。域名


其它還有*,+和?這三個符號,表示一個或一序列字符重複出現的次數。它們分別表示」沒有或更多」,」一次或更多」還有」沒有或一次」。下面是幾個例子:騰訊

  • ab*:表示一個字符串有一個a後面跟着零個或若干個b。(」a」, 「ab」, 「abbb」,……);
  • ab+:表示一個字符串有一個a後面跟着至少一個b或者更多;
  • ab?:表示一個字符串有一個a後面跟着零個或者一個b;
  • a?b+$:表示在字符串的末尾有零個或一個a跟着一個或幾個b。

你也可使用範圍,用大括號括起,用以表示重複次數的範圍。語法

  • ab{2}:表示一個字符串有一個a跟着2個b(」abb」);
  • ab{2,}:表示一個字符串有一個a跟着至少2個b;
  • ab{3,5}:表示一個字符串有一個a跟着3到5個b。

請注意,你必須指定範圍的下限(如:{0,2}而不是{,2})。還有,你可能注意到了,*,+和?至關於{0,},{1,}和{0,1}。密碼

還有一個|,表示「或」操做:英文

  • hi|hello:表示一個字符串裏有」hi」或者」hello」;
  • (b|cd)ef:表示」bef」或」cdef」;
  • (a|b)*c:表示一串」a」「b」混合的字符串後面跟一個」c」;

.能夠替代任何字符:

  • a.[0-9]:表示一個字符串有一個」a」後面跟着一個任意字符和一個數字;
  • ^.{3}$:表示有任意三個字符的字符串(長度爲3個字符);

方括號表示某些字符容許在一個字符串中的某一特定位置出現:

  • [ab]:表示一個字符串有一個」a」或」b」(至關於a|b);
  • [a-d]:表示一個字符串包含小寫的’a’到’d’中的一個(至關於a|b|c|d或者[abcd]);
  • ^[a-zA-Z]:表示一個以字母開頭的字符串;
  • [0-9]%:表示一個百分號前有一位的數字;
  • ,[a-zA-Z0-9]$:表示一個字符串以一個逗號後面跟着一個字母或數字結束。

你也能夠在方括號裏用^表示不但願出現的字符,^應在方括號裏的第一位。

(如:%[^a-zA-Z]%表示兩個百分號中不該該出現字母)。

爲了逐字表達,你必須在^.$()|*+?{\這些字符前加上轉移字符\。

請注意在方括號中,不須要轉義字符。


1、校驗數字的表達式

1 數字:^[0-9]*$

2 n位的數字:^\d{n}$

3 至少n位的數字:^\d{n,}$

4 m-n位的數字:^\d{m,n}$

5 零和非零開頭的數字:^(0|[1-9][0-9]*)$

6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

7 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d{1,2})?$

8 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$

9 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$

10 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$

11 非零的正整數:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

12 非零的負整數:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

13 非負整數:^\d+$ 或 ^[1-9]\d*|0$

14 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15 非負浮點數:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

17 正浮點數:^[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]*))$

18 負浮點數:^-([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]*)))$

19 浮點數:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

2、校驗字符的表達式

1 漢字:^[\\u4e00-\\u9fa5]{0,}$

2 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

3 長度爲3-20的全部字符:^.{3,20}$

4 由26個英文字母組成的字符串:^[A-Za-z]+$

5 由26個大寫英文字母組成的字符串:^[A-Z]+$

6 由26個小寫英文字母組成的字符串:^[a-z]+$

7 由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$

8 由數字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$

9 中文、英文、數字包括下劃線:^[\\u4E00-\\u9FA5A-Za-z0-9_]+$

10 中文、英文、數字但不包括下劃線等符號:^[\\u4E00-\\u9FA5A-Za-z0-9]+$ 或 ^[\\u4E00-\\u9FA5A-Za-z0-9]{2,20}$

11 能夠輸入含有^%&’,;=?$\」等字符:[^%&',;=?$\\x22]+

12 禁止輸入含有~的字符:[^~\\x22]+


3、特殊需求表達式

1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

4 手機號碼:^(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}$

5 電話號碼:("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

6 國內電話號碼:(0511-440522二、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

7 身份證號(15位、18位數字):^\d{15}|\d{18}$

8 短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

9 賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

10 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$

11 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

12 日期格式:^\d{4}-\d{1,2}-\d{1,2}

13 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$

14 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

15 錢的輸入格式:

16 1.有四種錢的表示形式咱們能夠接受:」10000.00」 和 「10,000.00」, 和沒有 「分」 的 「10000」 和 「10,000」:^[1-9][0-9]*$

17 2.這表示任意一個不以0開頭的數字,可是,這也意味着一個字符」0」不經過,因此咱們採用下面的形式:^(0|[1-9][0-9]*)$

18 3.一個0或者一個不以0開頭的數字.咱們還能夠容許開頭有一個負號:^(0|-?[1-9][0-9]*)$

19 4.這表示一個0或者一個可能爲負的開頭不爲0的數字.讓用戶以0開頭好了.把負號的也去掉,由於錢總不能是負的吧.下面咱們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$

20 5.必須說明的是,小數點後面至少應該有1位數,因此」10.」是不經過的,可是 「10」 和 「10.2」 是經過的:^[0-9]+(.[0-9]{2})?$

21 6.這樣咱們規定小數點後面必須有兩位,若是你認爲太苛刻了,能夠這樣:^[0-9]+(.[0-9]{1,2})?$

22 7.這樣就容許用戶只寫一位小數.下面考慮數字中的逗號,能夠這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

23 8.1到3個數字,後面跟着任意個 逗號+3個數字,逗號成爲可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

24 備註:」+」能夠用」*」替代

25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

26 中文字符的正則表達式:[\\u4e00-\\u9fa5]

27 雙字節字符:[^\\x00-\\xff](包括漢字在內,能夠用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1))

28 空白行的正則表達式:\n\s*\r (能夠用來刪除空白行)

29 HTML標記的正則表達式:<(\S*?)[^>]*>.*?|<.*? /> (網上流傳的版本太糟糕,上面這個也僅僅能部分,對於複雜的嵌套標記依舊無能爲力)

30 首尾空白字符的正則表達式:^\s*|\s*$或(^\s*)|(\s*$) (能夠用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),很是有用的表達式)

31 騰訊QQ號:[1-9][0-9]{4,}(騰訊QQ號從10000開始)

32 中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼爲6位數字)

33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址時有用)

34 校驗IP-v4地址\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b

35 校驗IP-v6地址

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

相關文章
相關標籤/搜索