編寫驗證規則最流行和最簡單的方法就是正規表示式了,但唯一的乙個問題是正規表示式的語法太隱晦了,讓人蛋疼無比。很多開發者為了在專案中應用複雜的驗證,經常要使用一些小抄來記住正則式的複雜語法和各種常用命令。
人人都看得懂的正規表示式教程
也許你是初學者,那以防萬一,我先來講講什麼是正規表示式吧:
正規表示式可以幫助我們更好的描述複雜的文字格式。一旦你描述清楚了這些格式,那你就可以利用它們對文字資料進行檢索、替換、提取和修改操作。
下面有乙個正規表示式的簡單例子。第一步先要引入有關正則式的命名空間:
using system.text.regularexpressions;
第二步就是用指定的正則式構建乙個正規表示式物件,下面的正則式是用來搜尋長度為10的a-z的英文本母:
regex obj = new regex("[a-z]");
最後,根據正則式在指定資料中檢索匹配項,如果匹配ismatch方法就會返回true。
messagebox.show(obj.ismatch(「shivkoirala」).tostring());
記住正則語法最好的辦法就是記住這三樣東西:bracket(括號), caret(插入符號)和dollars(美元符號)。
在正規表示式中有3種型別的括號
方括號 「[「和花括號「"
上面的這條正則式只能匹配a-z的英文本母,同樣是在中括號中標明匹配範圍。
花括號中則是標明匹配字串的最小長度和最大長度。
最後為了讓表示式更規則,分別在開頭和結尾加上了插入符號"^"和美元符號"$"。
好了,現在我們就用上面的3條語法來實現一些正規表示式的驗證規則吧。
檢查使用者是否輸入了shivkoirala?
shivkoirala
讓我們開始第乙個驗證,輸入的字元在a-g之間?
[a-g]
輸入的字元在a-g之間並且長度為3?
[a-g]
輸入的字元在a-g之間並且最大長度為3最小長度為1?
[a-g]
我如何在匹配像91230456, 01237648那樣的固定8位數?
^[0-9]$
如何驗證最小長度為3最大長度為7的數字,如:123, 1274667, 87654?
^[0-9]$
如何驗證像lji1020那樣的發票編號,前3個是字母剩餘為8位長度的數字?
前三個是字母:
^[a-z]
後面是8位長度的數字:
[0-9]
所以整個表示式為:
^[a-z][0-9]$
驗證像inv190203 或 inv820830那樣的前3位是不區分大小寫的英文本母,剩餘8位是數字。
在前面的表示式中只能匹配前3個是小寫英文本母的發票編號,如果我們輸入大寫字母那就不能匹配了。所以為了確保前3個字母是不區分大小寫的,我們就要用表示式^[a-za-z]。
^[a-za-z][0-9]$
我們可以驗證簡單的**url格式嗎?
第一步:檢查是否存在www:
^www.
第二步:網域名稱必須是長度在1-15的英文本母:
. [a-z]
第三步:以.com或者.org結束:
. (com|org)$
完整的表示式如下:
^www[.][a-z][.](com|org)$
讓我們在來看看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]))$
驗證格式為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次發生 ?
全文完。
記錄一下常用正規表示式
今天看到乙個正規表示式的帖子,想想,收錄一下,免得自己用的時候忘記了。一 校驗數字的表示式 1.數字 0 9 2.n位的數字 d 3.至少n位的數字 d 4.m n位的數字 d 5.零和非零開頭的數字 0 1 9 0 9 6.非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 7.帶1 2位小數...
微軟的正規表示式教程(一) 正規表示式簡介
微軟的正規表示式教程 一 正規表示式簡介 認識正規表示式 如果原來沒有使用過正規表示式,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。請回想一下在硬碟上是如何查詢檔案的。您肯定會使用 和 字元來幫助查詢您正尋找的檔案。字元匹配檔名中的單個字元,而 則匹配乙個或多個字元。乙個如...
65條常用正規表示式(收藏一下)
很多不太懂正則的朋友,在遇到需要用正則校驗資料時,往往是在網上去找很久,結果找來的還是不很符合要求。所以我最近把開發中常用的一些正規表示式整理了一下,在這裡分享一下。給自己留個底,也給朋友們做個參考。一 校驗數字的表示式 1 數字 0 9 2 n位的數字 d 3 至少n位的數字 d 4 m n位的數...