正規表示式

2021-09-02 16:09:01 字數 3415 閱讀 6860

之前在青藤園看到的,不過現在打不開了。

編寫驗證規則最流行和最簡單的方法就是正規表示式了,但唯一的乙個問題是正規表示式的語法太隱晦了,讓人蛋疼無比。很多開發者為了在專案中應用複雜的驗證,經常要使用一些小抄來記住正則式的複雜語法和各種常用命令。

在這篇文章中,我將試圖讓大家明白什麼是正規表示式,以及如何更輕鬆地學習正規表示式。

也許你是初學者,那以防萬一,我先來講講什麼是正規表示式吧:

正規表示式可以幫助我們更好的描述複雜的文字格式。一旦你描述清楚了這些格式,那你就可以利用它們對文字資料進行檢索、替換、提取和修改操作。

下面有乙個正規表示式的簡單例子。

第一步先要引入有關正則式的命名空間:

using system.text.regularexpressions;
第二步就是用指定的正則式構建乙個正規表示式物件,下面的正則式是用來搜尋長度為10的a-z的英文本母:

regex obj = new regex("[a-z]");
最後,根據正則式在指定資料中檢索匹配項,如果匹配ismatch方法就會返回true。

messagebox.show(obj.ismatch(「shivkoirala」).tostring());
3個重要的正則式命令記住正則語法最好的辦法就是記住這三樣東西:bracket(括號), caret(插入符號)和dollars(美元符號)。

在正規表示式中有3種型別的括號

方括號 「[「和花括號「"

上面的這條正則式只能匹配a-z的英文本母,同樣是在中括號中標明匹配範圍。

花括號中則是標明匹配字串的最小長度和最大長度。

最後為了讓表示式更規則,分別在開頭和結尾加上了插入符號"^"和美元符號"$"。

好了,現在我們就用上面的3條語法來實現一些正規表示式的驗證規則吧。

驗證:1、讓我們開始第乙個驗證,輸入的字元在a-g之間?

[a-g]

2、輸入的字元在a-g之間並且長度為3?

[a-g]

3、輸入的字元在a-g之間並且最大長度為3最小長度為1?

[a-g]

4、我如何在匹配像91230456, 01237648那樣的固定8位數?

^[0-9]$

5、如何驗證最小長度為3最大長度為7的數字,如:123, 1274667, 87654?

^[0-9]$

6、如何驗證像lji1020那樣的發票編號,前3個是字母剩餘為8位長度的數字?

前三個是大寫字母:

^[a-z]

後面是8位長度的數字:

[0-9]

所以整個表示式為:

^[a-z

][0-9]$

7、驗證像inv190203 或 inv820830那樣的前3位是不區分大小寫的英文本母,剩餘8位是數字。

在前面的表示式中只能匹配前3個是大寫英文本母的發票編號,如果我們輸入小寫字母那就不能匹配了。所以為了確保前3個字母是不區分大小寫的,我們就要用表示式^[a-za-z]。

^[a-za-z][0-9]$

8、我們可以驗證簡單的**url格式嗎?

第一步:檢查是否存在www:

^www.

第二步:網域名稱必須是長度在1-15的英文本母:

. [a-z]

第三步:以.com或者.org結束:

. (com|org)$

完整的表示式如下:

^www[.][a-z][.](com|org)$

9、讓我們在來看看bcd(其實也就是上面說的3條基本語法)如何驗證email格式。

第一步:email開始是長度在1-10的英文本母,最後跟乙個"@":

^[a-za-z0-9]@

第二步:@後面是長度在1-10的英文本母,後面跟乙個".":

[a-za-z].

第三步:最後以.com或.org結束:

.(com|org)$

最後完整的表示式如下:

^[a-za-z0-9]@[a-za-z].(com|org)$

驗證值在0-25的數字:

^(([0-9])|([0-1][0-9])|([0-2][0-5]))$

10、驗證格式為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.

i再為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])$

快捷命令

你也可以用以下的快捷命令來簡化你的正規表示式:

[0-9]    \d

[a-z][0-9][_] \w

0次或多次發生 *

至少一次發生 +

0次或1次發生 ?

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d 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 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 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 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...