php常用正則表達式
A. thinkphp驗證器正則常用規則
ThinkPHP的自動驗證常用的正則
一般我們見的比較多的是設置規則為require、email之類的,其實這些本身也是屬於正則表達式驗證方式,只是系統內置定義了一些常用的正則表達式而已。這些內置的正則表達式的定義可以參考model類的regex方法,內置支持的正則定義包括:
require 欄位必須、email 郵箱、url URL地址、currency 貨幣、number 數字、zip 郵編、integer 整數、double 浮點數、english 英文字母,但是並不局限於這些正則規則的,我們完全可以直接在驗證規則裡面使用正則表達式進行定義,這樣我們可以憑借強大的正則表達式來進行表單欄位驗 證,例如:
附上一些表單驗證中比較常用的正則表達式寫法:
匹配特定字元串:
限定符
限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6種。
正則表達式的限定符有:
ThinkPHP的自動驗證機制是為了進行表單數據驗證,驗證可以支持function、 callback、confirm、equal、unique和regex,這里要講的是使用正則表達式進行驗證。
特殊字元
許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字元,必須首先使字元"轉義",即,將反斜杠字元 放在它們前面。下表列出了正則表達式中的特殊字元:
正則表達式(regular expression)描述了一種字元串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
例如:
構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字元與運算符可以將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字元、字元集合、字元范圍、字元間的選擇或者所有這些組件的任意組合。
正則表達式是由普通字元(例如字元 a 到 z)以及特殊字元(稱為"元字元")組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字元串。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。
普通字元包括沒有顯式指定為元字元的所有可列印和不可列印字元。這包括所有大寫和小寫字母、所有數字、所有標點符號和一些其他符號。
非列印字元也可以是正則表達式的組成部分。下表列出了表示非列印字元的轉義序列:
所謂特殊字元,就是一些有特殊含義的字元,如上面說的 runoo*b 中的 ,簡單的說就是表示任何字元串的意思。如果要查找字元串中的 * 符號,則需要對 * 進行轉義,即在其前加一個 : runo*ob 匹配 runo ob。
許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字元,必須首先使字元"轉義",即,將反斜杠字元 放在它們前面。下表列出了正則表達式中的特殊字元:
限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6種。
正則表達式的限定符有:
由於章節編號在大的輸入文檔中會很可能超過九,所以您需要一種方式來處理兩位或三位章節編號。限定符給您這種能力。下面的正則表達式匹配編號為任何位數的章節標題:
請注意,限定符出現在范圍表達式之後。因此,它應用於整個范圍表達式,在本例中,只指定從 0 到 9 的數字(包括 0 和 9)。
這里不使用 + 限定符,因為在第二個位置或後面的位置不一定需要有一個數字。也不使用 ? 字元,因為使用 ? 會將章節編號限制到只有兩位數。您需要至少匹配 Chapter 和空格字元後面的一個數字。
如果您知道章節編號被限制為只有 99 章,可以使用下面的表達式來至少指定一位但至多兩位數字。
上面的表達式的缺點是,大於 99 的章節編號仍只匹配開頭兩位數字。另一個缺點是 Chapter 0 也將匹配。只匹配兩位數字的更好的表達式如下:
或
* 、+限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上一個?就可以實現非貪婪或最小匹配。
例如,您可能搜索 HTML 文檔,以查找括在 H1 標記內的章節標題。該文本在您的文檔中如下:
<H1>Chapter 1 - 介紹正則表達式</H1>
貪婪: 下面的表達式匹配從開始小於符號 (<) 到關閉 H1 標記的大於符號 (>) 之間的所有內容。
非貪婪: 如果您只需要匹配開始和結束 H1 標簽,下面的非貪婪表達式只匹配 <H1>。
如果只想匹配開始的 H1 標簽,表達式則是:
通過在 *、+ 或 ? 限定符之後放置 ?,該表達式從"貪心"表達式轉換為"非貪心"表達式或者最小匹配。
定位符使您能夠將正則表達式固定到行首或行尾。它們還使您能夠創建這樣的正則表達式,這些正則表達式出現在一個單詞內、在一個單詞的開頭或者一個單詞的結尾。
正則表達式的定位符有:
B. PHP正則表達式((:[0-9a-zA-Z$_.`-]|[\xC2-\xDF][\x80-\xBF])+)/is是什麼意思
(?: )表示只進行分組,不進行捕獲
[0-9a-zA-Z$_.`-] ——0-9、a-z、A-Z或$、_、.、`、-中的一個字元
| ——表示或者
[\xC2-\xDF][\x80-\xBF] ——用十六進製表示的字元范圍【具體是什麼字元不太清楚,比如漢字的范圍一般是 4E00-9FA5】
+ ——前面的字元有一個或多個
(?: +) 外面的括弧( )——是捕獲括弧。即不捕獲單個匹配字元,只捕獲匹配的最大字串。
/is——是PHP中正則表達式模式修飾符,其中i代表 不區分大小寫,s代表:如果設定了這個修正符,那麼,被匹配的字元串將視為一行來看,包括換行符,換行符將被視為普通字元串。
模式修飾符還有:m、x、e等
C. 史上最全的PHP正則表達式
一、校驗數字的表達式
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)$
二、校驗字元的表達式
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]+
三、特殊需求表達式
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-4405222、021-87888822):
\d{3}-\d{8}|\d{4}-\d{7}
7 、身份證號:
15或18位身份證:
^\d{15}|\d{18}$
15位身份證:
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
18位身份證:
^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
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地址時有用)
D. php 身份證的正則表達式怎麼寫
$IdCard = "/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/i";
提示 :正則格式: 『/正則表達式/模式修正符』;
所以 添加 i 是忽略英文字母大小寫的
E. php中如何用正則表達式匹配中文字元呢
php中匹配一個或多個中文字元(包含簡體和繁體中文字元)的正則表達式如下:/[[b]\x{4e00}-\x{9fa5}]+/注意:php中正則表達式的16進制是以
\x
開頭的。
F. php 怎樣判斷一個字元串為正則表達式
PHP 中的正則表達式格式為 : /.*/
如果這個字元串由 / 開頭, 由 / 結尾,應該就是一個正則表達式。
header('content-type:text/html;charset=utf-8');
$preg="/^/.*/$/";
$test="/abc/";
if(preg_match($preg,$test)){
echo'是正則表達式';
}else{
echo'不是正則表達式';
}
G. php 用戶名和密碼 正則表達式
/^[A-Za-z0-9_\u4e00-\u9fa5]{3,15}$/ 用戶名
/^[^\u4e00-\u9fa5\s]{6,20}$/ 密碼
H. 超常用的PHP正則表達式收集整理
以下就是對超常用的PHP正則表達式進行的收集整理,為了方便大家更快更好的掌握php正則表達式。
一、表單驗證匹配
驗證賬號,字母開頭,允許
5-16
位元組,允許字母數字下劃線:^[a-zA-Z][a-zA-Z0-9_]{4,15}$
驗證賬號,不能為空,不能有空格,只能是英文字母:^\S+[a-z
A-Z]$
驗證賬號,不能有空格,不能非數字:^\d+$
驗證用戶密碼,以字母開頭,長度在
6-18
之間:^[a-zA-Z]\w{5,17}$
驗證是否含有
^%&',;=?$\
等字元:[^%&',;=?$\x22]+
匹配Email地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配騰訊QQ號:[1-9][0-9]{4,}
匹配日期,只能是
2004-10-22
格式:^\d{4}\-\d{1,2}-\d{1,2}$
匹配國內電話號碼:^\d{3}-\d{8}|\d{4}-\d{7,8}$------------評註:匹配形式如010-12345678
或0571-12345678
或
0831-1234567
匹配中國郵政編碼:^[1-9]\d{5}(?!\d)$
匹配身份證:\d{14}(\d{4}|(\d{3}[xX])|\d{1})------------評註:中國的身份證為15
位或18
位
不能為空且二十位元組以上:^[\s|\S]{20,}$
二、字元匹配
匹配由
26
個英文字母組成的字元串:^[A-Za-z]+$
匹配由
26
個大寫英文字母組成的字元串:^[A-Z]+$
匹配由
26
個小寫英文字母組成的字元串:^[a-z]+$
匹配由數字和
26
個英文字母組成的字元串:^[A-Za-z0-9]+$
匹配由數字、26個英文字母或者下劃線組成的字元串:^\w+$
匹配空行:\n[\s|
]*\r
匹配任何內容:[\s\S]*
匹配中文字元:[\x80-\xff]+
或者
[\xa1-\xff]+
只能輸入漢字:^[\x80-\xff],{0,}$
匹配雙位元組字元(包括漢字在內):[^\x00-\xff]
三、匹配數字
只能輸入數字:^[0-9]*$
只能輸入n位的數字:^\d{n}$
只能輸入至少n位數字:^\d{n,}$
只能輸入m-n位的數字:^\d{m,n}$
匹配正整數:^[1-9]\d*$
匹配負整數:^-[1-9]\d*$
匹配整數:^-?[1-9]\d*$
匹配非負整數(正整數
+
0):^[1-9]\d*|0$
匹配非正整數(負整數
+
0):^-[1-9]\d*|0$
匹配正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
匹配負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$
匹配浮點數:^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
匹配非負浮點數(正浮點數
+
0):^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
匹配非正浮點數(負浮點數
+
0):^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
四、其他
匹配HTML標記的正則表達式(無法匹配嵌套標簽):<(\S*?)[^>]*>.*?</\1>|<.*?
/>
匹配網址
URL
:[a-zA-z]+://[^\s]*
匹配
IP
地址:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
匹配完整域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
提示
上述正則表達式通常都加了
^
與
$
來限定字元的起始和結束,如果需要匹配的內容包括在字元串當中,可能需要考慮去掉
^
和
$
限定符。
以上正則表達式僅供參考,使用時請檢驗後再使用,希望通過這些超常用的PHP正則表達式