常用正則表達式校驗

来源:http://www.cnblogs.com/sxt-zkys/archive/2017/07/21/7216897.html
-Advertisement-
Play Games

本文章由尚學堂旗下雲數學院周老師做內容指導,薛同學編輯,如需轉載,請標明出處。 QQ技術交流群:299142667 前言 使用man grep查看grep的幫助文檔,有如下內容: 可以看出,正則表達式由三類,分別是 基本的正則表達式(Basic Regular Expression 又叫 Basic ...


本文章由尚學堂旗下雲數學院周老師做內容指導,薛同學編輯,如需轉載,請標明出處。

QQ技術交流群:299142667

 

前言

使用man grep查看grep的幫助文檔,有如下內容:

可以看出,正則表達式由三類,分別是

  •  基本的正則表達式(Basic Regular Expression 又叫 Basic RegEx  簡稱 BREs)
  •  擴展的正則表達式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs)
  •  Perl 的正則表達式(Perl Regular Expression 又叫 Perl RegEx 簡稱 PREs)

由於BREs語法中需要大量轉義字元,導致正則表達式不易看懂,因此本文使用Perl類型的正則表達式。

1.校驗MAC地址

我們常見的MAC地有如下兩種格式:

48-5D-60-DE-3D-C5

48:5D:60:61:3D:C5

我們以第一種為例,即一共有6組十六進位的數中間由短橫線“-”連接。每組十六進位的數據可以看成是由取值範圍為a-f、A-F或0-9的兩個字元組成。

首先,用正則表達式表示a-f、A-F或0-9的兩個字元

[a-fA-F0-9] [a-fA-F0-9]

可以發現[a-fA-F0-9]重覆了兩次,因此上述表達式可以寫成

[a-fA-F0-9] {2}

然後,用正則表達式表示六組a-f、A-F或0-9的兩個字元中間用短橫線連接:

[a-fA-F0-9]{2}-[a-fA-F0-9]{2}-[a-fA-F0-9]{2}-[a-fA-F0-9]{2}-[a-fA-F0-9]{2}-[a-fA-F0-9]{2}

上述正則表達式太臃腫了,一組兩位的其實我們可以看成

[a-fA-F0-9]{2}-重覆了5次(註意後邊有個短橫線),最後又加了一組[a-fA-F0-9]{2},而其中的0-9可以用\d代替。基於這樣的思路,對上述正則表達式進行修改後如下所示:

([a-fA-F\d]{2}-){5}[a-fA-F\d]{2}

最後,我們檢驗下上述正則表達式是否滿足要求。創建一個mac.txt,內容如下所示:

48-5D-60-61-3D-C5

08-D4-hM-1D-AD-AE

28-D2-44-B7-AD-EC

XX-5D-60-61-3D-C5

其中第2和第4行是錯誤的MAC地址,檢測結果如下:

由以上結果可以看出上述正則表達式是正確的。

 

2.校驗郵箱地址

下表是常見的郵箱格式

@首碼

純數字

[email protected]

純字母

[email protected]

字母數字混合

[email protected]

帶點的

[email protected]

帶下劃線 

[email protected]

帶連接線

[email protected]

@尾碼

二級功能變數名稱

[email protected]

三級功能變數名稱

[email protected]

根據上述常見郵箱格式,我們可以總結出郵箱格式符合的規則

1) 郵箱必有一個@

2) 郵箱@首碼由數字或字母開頭

3) 郵箱@首碼由多個字母、數字、段橫線-、下劃線_、英文句號.自由拼接而成

4) 郵箱@尾碼由兩級或三級功能變數名稱組成,其中每個功能變數名稱中間由英文句號“.”隔開, 而每級功能變數名稱都是由字母或數字組成

根據以上規則,可以得到如下正則表達式:

1) 郵箱必有一個@ ,對應正則表達式如下所示:

@

2) 郵箱@首碼由數字或字母開頭,對應正則表達式如下所示:

^[a-zA-Z0-9]@

其中^表示開始位置,[a-zA-Z0-9]表示數字或字母

3) 郵箱@首碼由多個字母、數字、段橫線-、下劃線_、英文句號.自由拼接而成

^[a-zA-Z0-9][a-zA-Z0-9-\._]+@

其中+表示重覆1到多次

4) 郵箱@尾碼由兩級或三級功能變數名稱組成,其中每個功能變數名稱中間由英文句號“.”隔開,而每級功能變數名稱都是由字母或數字組成。

@([a-zA-Z0-9]+\.){1,2}[a-zA-Z0-9]+$

其中([a-zA-Z0-9]+\.){1,2}可以拆分成如下內容:

[a-zA-Z0-9] 數字或字母

[a-zA-Z0-9]+數字或字母重覆1到多次

[a-zA-Z0-9]+.數字或字母重覆1到多次後邊加上英文句號.

([a-zA-Z0-9]+\.){1,2}數字或字母重覆1到多次後邊加上英文句號.做為一個整體重覆1到2次。

最後的[a-zA-Z0-9]+表示以多個數字或字母結尾。

將上述郵箱@首碼的正則表達式和郵箱@尾碼的正則表達式組合在一起,同時由於0-9的數字可以用\d表示,可以用\d替換內容中的0-9,最後得到的表達式我們想要的可以匹配郵箱的正則表達式,如下所示:

^[a-zA-Z\d][a-zA-Z\d-\._]+@([a-zA-Z\d]+\.){1,2}[a-zA-Z\d]+$

下麵我們來檢驗下寫出來的正則表達式:

新建一個mail.txt,內容如下:

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

#[email protected]

[email protected].

其中最後三行為錯誤的格式,使用正則表達式進行校驗:

由上述結果可以看出,我們的正則表達式是符合要求的。

 

3.校驗手機號

要校驗手機號,我們首先需要知道手機號的組成格式。目前國內的手機號有以下格式:

1)由數字1開頭

2)第二位數字的取值範圍是3、4、5、7、8、

3)最後為9位數字

根據以上規則,寫出對應的正則表達式

1) 由數字1開頭

^1

2) 第二位數字的取值範圍是3、4、5、7、8、

[34578]

3) 最後為9位數字

[0-9]{9}$

其中[0-9]{9}表示0-9的數字取值重覆9次,$表示結尾。由於0-9的數字可以由\d表示,上述內容等價於

\d{9}$

將上述正則表達式組合在一起,就可以得到我們想要的正則表達式,如下所示:

^1[34578]\d{9}$

下麵開始進行校驗,新建一個phone.txt,內容如下:

138537721989

146398702123

12200993333

23848270281

13849199233

d333300-903

其中只有倒數第二行的號碼是正確的,使用正則表達式進行校驗:

由上述結果可以看出,我們的正則表達式是符合要求的。

 

4.校驗IP地址

對IP地址進行嚴格校驗比較麻煩,首先要確定一個標準可用的IP地址需要滿足如下條件:

1) 由四組不大於255的數字組成,中間由“.”連接

2) 取值範圍為0.0.0.0-255.255.255.255

一個IP地址可以看成是四組0-255的數組中間由.隔開,進一步可以看成是0-255.重覆三次(註意0-255後有點),後邊再跟上一個0-255的數字。

下麵對0-255的數字可能的組成情況進行分析:

數字

取值

正則表達式

 

三位數

25開頭

250-255

25[0-5]

20-24開頭

200-249

2[0-4][0-9]

1開頭

100-199

1[0-9][0-9]等價於1\d{2}

兩位數

10-99

[1-9]\d

一位數

0-9

\d

 

將上述五種情況組合在一起就是我們想要的結果,這裡註意五種情況之間是或的關係,用|連接,可以得到(0-255)的正則表達式如下:

(25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d

以上是一組0-255的數據,上邊已經分析了思路,IP由三組(0-255).和一組0-255組成,三組(0-255).就是(0-255).重覆三次。

首先是(0-255).的表達式:

((25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d)\.

然後重覆三次:

(((25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d)\.){3}

最後加上一組(0-255):

(((25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d)\.){3}((25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d)

為了更嚴謹點,需要加上開始和結束限定符,如下所示:

^(((25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d)\.){3}((25[0-5])|(2[0-4]\d)|(1\d{2})|([1-9]\d)|\d)$

下麵開始驗證,新建一個ip.txt,內容如下:

290.244.1900.3

254.263.233.0

192.168.266.900

aa.3.0.1

2.2.2.3b

127.02.0.00

192.168.212.11

0.0.0.0

255.255.255.255

其中只有最後三行的IP地址是正確的,我們檢驗下剛纔寫的正則表達式:

 

可以看到輸出結果達到了預期的效果,證明正則表達式是有效的。

 

如需轉載請標明出處:http://www.cnblogs.com/sxt-zkys/

QQ技術交流群:129518033


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • history.pushState 和 history.replaceState 可以在不刷新當前頁面的情況下更改URL,但是這樣就無法獲取通過AJAX得到的新頁面的內容了。雖然各種HTML5文檔說 window.onpopstate 事件可以攔截 pushState 的消息,但在實際的測試中, o ...
  • 本篇文章主要包括兩方面,如何從0開始把RN(react-native)項目整合進入現有Android項目,以及我們做的第一個RN的上線項目遇到的一些坑。 初次做RN項目,我們選擇做了一個邏輯相對簡單的轉轉app內部的幫助中心項目。整個項目有4個頁面用的RN,其他頁面走的是native提供的統跳協議, ...
  • 如上代碼,想要在點擊button提交跳轉到updateproduct.do.php的同時,將本頁獲取的$p_id,通過url值傳到下個頁面里。可是每次點擊button後 地址欄里都只有 “ updateproduct.do.php?p_name=11&p_price=22&p_pic=33&p_da ...
  • 具體代碼如下: ...
  • 1、連字元字元串轉駝峰——方法1 var a = "first-second-third"; function test(str){ var arr = str.split('-'); for (var i = 1; i < arr.length; i++){ arr[i] = arr[i].cha ...
  • 一,base.css基礎樣式表的意義 我昨天,整理了一下代碼規範。 發現現在這個程度的頁面還原。有必要創建一個規範的base.css庫和framework.css庫 而且也要為日後的工作整理一些常用的基礎css,你們想象一下日後在公司里上班,如果每次都要逐一新增基礎樣式,那麼花費的時間就會滴水長流。 ...
  • 什麼是DOM? HTMLDOM將HTML文檔視作樹結構,被稱為"節點樹" 作用:可通過 JavaScript (以及其他編程語言)對 HTML DOM 進行訪問 ———————————————————————————————————————————— DOM對象方法 具體方法見手冊 getEleme ...
  • 我網上查了很多方法,說是用戶名或者密碼錯誤,但是我通過命令行和Navicat都能直接連接MySQL,但是通過nodejs就是連接不上,命令行中報了標題的那個錯誤,我也問了很多人,也都不是很清楚。 後來我想其他方法都能連接成功,僅僅是nodejs連接不上,是不是nodejs連接還需額外的配置,看了no ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...