>[success] 關于正則的速記法
| 實際命令 | 快捷命令 |
| :---: | :---: |
| [0-9] | \d |
| [a-z][0-9][_] | \w |
| <span style="color:blue;">{0,}</span> 發生0次或多次 | * |
| <span style="color:blue;">{1,} </span> 至少發生一次 | + |
| <span style="color:blue;">{0,1} </span> 發生0次或1次 | ? |
- ab<span style="color:blue;">\*</span>:表示一個字符串有一個a后面跟著<span style="color:blue;">零個或若干個</span>b。("a", "ab", "abbb",……);
- ab<span style="color:blue;">+</span>:表示一個字符串有一個a后面跟著<span style="color:blue;">至少一個</span>b<span style="color:blue;">或者更多</span>;
- ab<span style="color:blue;">?</span>:表示一個字符串有一個a后面跟著<span style="color:blue;">零個或者一個</span>b;
- a<span style="color:blue;">?</span>b<span style="color:blue;">+$</span>:表示在字符串的<span style="color:blue;">末尾</span>有<span style="color:blue;">零個或一個</span>a跟著<span style="color:blue;">一個或幾個</span>b。
# :-: 輕松學習正則表達式
也許你是初學者,那以防萬一,我先來講講什么是正則表達式吧:
正則表達式可以幫助我們更好的描述<span style="color:red;">復雜的文本格式</span>。一旦你描述清楚了這些格式,那你就可以利用它們對文本數據進行<span style="color:red;">檢索、替換、提取和修改操作</span>。
下面有一個正則表達式的簡單例子。第一步先要引入有關正則式的<span style="color:red;">命名空間</span>:
~~~
using System.Text.RegularExpressions;
~~~
第二步就是用指定的正則式構建一個<span style="color:red;">正則表達式對象</span>,下面的正則式是用來搜索長度為10的a-z的英文字母:
~~~
Regex obj = new Regex(“[a-z]{10}”);
~~~
最后,根據正則式<span style="color:red;">在指定數據中檢索匹配項</span>,如果匹配IsMatch方法就會返回true。
~~~
MessageBox.Show(obj.IsMatch(“shivkoirala”).ToString());
~~~
3個重要的正則式命令
記住正則語法最好的辦法就是記住這三樣東西:Bracket(括號), caret(插入符號)和Dollars(美元符號)。

- B
- 在正則表達式中有3種類型的括號
- 方括號"\["內是需<span style="color:blue;">要匹配</span>的<span style="color:blue;">字符</span>, <span style="color: orange">#任意匹配哦!不帶\[\]的是固定匹配!</span>
- 花括號"{"內是指定匹配字符的<span style="color:blue;">數量</span>。
- 圓括號“(“ 則是用來<span style="color:blue;">分組</span>的。
- C
- 插入符號 “^” 表示正則式的開始。
- D
- 美元符號“$” 表示正則式的結束。
現在你知道上面的3個語法后,你就可以寫世界上任何一條驗證規則了。比如下面的例子就很好的說明了上面3條正則語法是如何協調運作的。

- 上面的這條正則式只能匹配a-z的英文字母,同樣是在中括號中標明匹配范圍。
- 花括號中則是標明匹配字符串的最小長度和最大長度。
- 最后為了讓表達式更規則,分別在開頭和結尾加上了插入符號"^"和美元符號"$"。
好了,現在我們就用上面的3條語法來實現一些正則表達式的驗證規則吧。
### **檢查用戶是否輸入了shivkoirala?**
讓我們開始第一個驗證,輸入的字符在a-g之間?
~~~
[a-g]
~~~
輸入的字符在a-g之間并且長度為3?
~~~
[a-g]{3}
~~~
輸入的字符在a-g之間并且最大長度為3最小長度為1?
~~~
[a-g]{1,3}
~~~
### **我如何在匹配像91230456, 01237648那樣的固定8位數?**
~~~
^[0-9]{8}$
~~~
### **如何驗證最小長度為3最大長度為7的數字?**
如:123, 1274667, 87654?
~~~
^[0-9]{3,7}$
~~~
### **如何驗證像abc10206688那樣的發票編號,前3個是字母剩余為8位長度的數字?**
前三個是字母:
~~~
^[a-z]{3} #只能匹配小寫
~~~
后面是8位長度的數字:
~~~
[0-9]{8}
~~~
所以整個表達式為:
~~~
^[a-z]{3}[0-9]{7}$
~~~
### **驗證像INV190203 或 inv820830那樣的前3位是<span style="color:blue;">不區分</span>大小寫的英文字母,剩余8位是數字**
在<span style="color:blue;">前面的表達式</span>中只能匹配前3個<span style="color:blue;">是小寫</span>英文字母的發票編號,如果我們輸入大寫字母那就不能匹配了。
所以為了確保前3個字母是<span style="color:blue;">不區分大小寫的</span>,我們就要用表達式^\[a-zA-Z\]{3}。
完整的正則式如下:
~~~
^[a-zA-Z]{3}[0-9]{7}$
~~~
### **我們可以驗證簡單的網址URL格式嗎?**
第一步:檢查是否存在www:
~~~
^www. #此為固定匹配
~~~
第二步:域名必須是長度在1-15的英文字母:
~~~
. [a-z]{1,15} #此為任意匹配,記住他帶[]了。如www.baidu 只要baidu是a-z之間的任意字符就能匹配
~~~
第三部:以.com或者.org結束:
~~~
. (com|org)$
~~~
完整的表達式如下:
~~~
^www[.][a-z]{1,15}[.](com|org)$
~~~
### **讓我們在來看看BCD(其實也就是上面說的3條基本語法)如何驗證email格式**
第一步:email開始是長度在1-10的英文字母,最后跟一個"@":
~~~
^[a-zA-Z0-9]{1,10}@
~~~
第二步:@后面是長度在1-10的英文字母,后面跟一個".":
~~~
[a-zA-Z]{1,10}.
~~~
第三步:最后以.com或.org結束:
~~~
.(com|org)$
~~~
最后完整的表達式如下:
~~~
^[a-zA-Z0-9]{1,10}@[a-zA-Z]{1,10}.(com|org)$
~~~
### **驗證值在0-25的數字:**
~~~
^(([0-9])|([0-1][0-9])|([0-2][0-5]))$
~~~
### **驗證格式為MM/DD/YYYY, YYYY/MM/DD and DD/MM/YYYY的日期:**
| 步驟 | 正則表達式 | 描述說明 |
| --- | --- | --- |
| 先來檢查 DD. 首先DD的長度為1-29 ( 2月份) , 1-30 (月小) , 1-31 (月大) .所以 DD 就是 1-9 或 01-09| [1-9]\|0[1-9] | 允許用戶輸入1-9或者01-09 |
| 再為DD添加匹配10-19 | [1-9]\|1[0-9] | 允許用戶輸入01-19 |
| 再為DD添加匹配20-29 | [1-9]\|1[0-9]\|2[0-9] | 允許用戶輸入01-29 |
| 再為DD添加匹配30-31 | [1-9]\|1[0-9]\|2[0-9]\|3[0-1]| 最后用戶可以輸入01-31 |
| 再來匹配日期間的分隔符"/","-" | [/ . -\] | 允許用戶輸入日期分隔符 |
| MM也是類似的操作 | [1-9]\|0[1-9]\|1[0-2] | 讓用戶輸入月份值01-12 |
| 最后就是YY的操作 | 1[9][0-9][0-9]\|2[0][0-9][0-9] | 允許用戶輸入年份1900-2099 |
最后DD/MM/YYYY(驗證日/月/年)格式的日期的正則表達式為:
~~~
^([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[- / .]([1-9]|0[1-9]|1[0-2])[- / .](1[9][0-9][0-9]|2[0][0-9][0-9])$
~~~
MM/DD/YYYY(驗證月/日/年)格式的日期:
~~~
^([1-9]|0[1-9]|1[0-2])[- / .]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[- / .](1[9][0-9][0-9]|2[0][0-9][0-9])$
~~~
YYYY/MM/DD(驗證年/月/日)格式的日期:
~~~
^(1[9][0-9][0-9]|2[0][0-9][0-9])[- / .]([1-9]|0[1-9]|1[0-2])[- / .]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])$
~~~
- 雜談
- 開發 & 維護的工作流程
- 新手如何看php手冊 和 框架手冊
- 開發 & 維護的不同點
- 從0到1,搭建新項目的工作流程
- 從1到N,維護的工作流程
- 優化流程
- 生成錯誤日志和慢日志的方法
- 查錯思路
- 怎么快速接手一個項目
- 前端常用知識點
- javascript
- 自己封裝的函數
- 處理數字
- 功能代碼
- 動態添加圖片
- 判斷是手機端還是pc端
- javascript:;是什么意思?怎么用呢
- html & h5
- a標簽中target設置為blank和_blank有什么區別?
- 亂碼
- 提交方式:button標簽 和 input
- 塊元素
- 內聯元素
- h5特有屬性
- h5的localStorage【增、刪、改、查】
- jquery
- 常用方法
- 功能代碼
- 動態刪除圖片
- 一個按鈕,切換2種狀態
- 換膚
- 深入理解(function(){... })();
- json & xml
- json
- 語法速記
- json對象取值
- 字符串、對象、數組的區別
- xml
- [CDATA[%s]]的作用是什么
- 轉義字符
- CDATA 想被xml解析的文本數據
- CDATA 不想被xml解析的文本數據
- 微信小程序
- 其他
- websocket
- 跨域
- css
- 行內 & 內連 & 外連 寫法
- 優先級
- 更加精準的匹配
- 使用百分比如何生效
- php在html、js、jq中的的原生寫法
- *php在html中的語法
- php在js中的語法
- php在jq中的語法
- 正則表達式
- php常用基礎知識(思想為主)
- php為什么是“邊編譯邊運行”
- 冒號、endif、endwhile、endfor使用
- 遞歸思想(速記法)
- cookie和session的理解
- php常用內置(系統)函數
- 常量
- 字符串
- 數組
- 日期時間
- 文件 & 目錄
- 數學
- 程序執行
- 判斷
- 選項和信息(修改配置文件的)
- 錯誤處理 & 日志記錄
- 編碼格式
- session
- IP相關
- 類 & 對象
- 性能
- 其他函數
- 魔術方法
- $_SERVER
- 變量處理
- php自己封裝的一些函數
- 導入、導出、生成文件
- 數組
- 數字
- 字符串
- 其他
- 獲取linux硬件信息
- 常見插件/類庫使用
- 前端-框架/插件
- bootstrap 學習筆記
- layer 學習筆記
- layDate 學習筆記
- 百度ueditor1.4.4.3富文本編輯器
- quill富文本編輯器
- 百度ECharts圖形報表
- webuploader上傳圖片
- 后端類庫
- workerman 聊天室
- QRCODE 二維碼
- redis
- seaslog 日志
- phpspider 爬蟲
- Mailer 發送郵件
- simple_html_dom
- phpstorm使用
- 快捷鍵
- 連接mysql數據庫
- 斷點 + debug調試
- 運行內存不夠
- wamp環境
- yii、laravel、tp、開發自己的php框架
- 看框架源碼的思路
- tp5框架的使用
- 1、助手函數原理解析
- 開發自己的php框架
- 常用的開發思路 和 小功能實現代碼
- 爬蟲思路
- 功能點思路
- tp5判斷是不是異地登錄(簡單版)
- 微信開發,反向代理
- 微信開發,關閉當前頁面
- 消息隊列的實現
- 頁面靜態化
- session串號
- 站內信設計思路
- web在線管理器
- 語言相關(開發有關)
- 接收json(text/xml)格式數據
- 原生文件上傳(狀態碼)
- openssl擴展
- 打印對象 和 遍歷對象
- 使用OB緩存的幾個原則
- CLI模式執行php文件
- foreach時,添加元素 或 修改元素的值
- 功能點 代碼實現
- 生成url目錄樹(沒有pid)
- 多圖上傳(vue傳base64)
- 下載文件,耗時算法
- 生成商品二維碼
- 導出excel
- 搜索
- 阿里大魚發短信
- 使用阿里云oss
- location.href跳轉后,丟失用戶的session
- “\r ” “\r\n” “\t”的區別
- php的配置文件詳解
- 開啟錯誤日志
- 開啟慢日志
- 開啟短標簽
- 分析php-fpm.conf中的request_terminate_timeout參數