C#驗證控件使用方法及常用正則表達式例析

 ASP.NET爲開發人員提供了一整套完整的服務器控件來驗證用戶輸入的信息是否有效。這些控件如下:

    1、RequiredFieldValidator:驗證一個必填字段,如果這個字段沒填,那麼,將不能提交信息。

    2、CompareValidator:比較驗證。比較兩個字段值是否相等,如密碼和確認密碼兩個字段是否相等;比較一個字段與一個具體的值。

    3、RangeValidator:範圍驗證。驗證一個字段是否在某個範圍中,如成績字段要是0~100範圍中。

    4、RegularExpressionValidator:正則表達式驗證。它根據正則表達式來驗證用戶輸入字段的格式是否合法,如電子郵件、身份證、電話號碼等。

    5、CustomValidator:在運行定製的客戶端JavaScript或VBScript函數時,可以使用這個控件。

    那麼,如何使用驗證控件呢?

    1、使用Visual Studio .NET 2003 命令提示工具運行aspnet_regiis -c命令複製ASP.NET客戶端腳本文件。

    2、把驗證控件放在要驗證的控件右邊

    3、修改驗證控件的ControlToValidate屬性爲要驗證的控件名。

    4、把驗證控件的ErrorMessage屬性修改更具體的錯誤描述信息,如“請輸入正確的電子郵件密碼”、“密碼不一致”、“必填字段”等。

    5、如果是使用RequiredFieldValidator必填驗證控件,到這步就OK了。但是,如果使用的是其它幾個控件,還需要作以下設置:

    A、CompareValidator控件,比較兩個控件的值,要設置ControlToCompare、Operator和Type屬性。如果是要比較一個控件和一個具體的值,需要修改ValueToCompare、Operator和Type屬性。

    B、RangeValidator控件,分別在MinimunValue和MaximumValue屬性中設置最小值和最大值,還需要把Type屬性改爲Currency或Integer。

    C、RegularExpress控件:通過ValidationExpress屬性,從列表中選擇一個新的正則表達式。

    最後,需要注意的是,每一個字段都可以使用多個不周類型的驗證控件進行驗證。

.NET2.0 驗證控件常用的正則表達式正則表達式是.NET隱形的語法。關於其語法的文章很多,也可以參考MSDN。本文的目的是舉例,包括所有的正則表達式用法,會不斷補充,歡迎大家留言提供支持!

RegularExpressionValidator控件

使用RegularExpressionValidator控件,當然也可以不用RegularExpressionValidator控件在後臺直接驗證

ValidationExpression屬性自帶了幾個默認驗證方法,但是那遠遠不夠的。ErrorMessage屬性是報錯信息。

如圖所示可以點擊“...”彈出的窗口選擇你要的正則表達式,或者直接自己寫。

在IE裏輸入不是對應格式的時候就會報錯:

驗證數字:

只能輸入1個數字

表達式 ^\d$

描述 匹配一個數字

匹配的例子 0,1,2,3

不匹配的例子

只能輸入n個數字

表達式 ^\d{n}$ 例如^\d{8}$

描述 匹配8個數字

匹配的例子 12345678,22223334,12344321

不匹配的例子

只能輸入至少n個數字

表達式 ^\d{n,}$ 例如^\d{8,}$

描述 匹配最少n個數字

匹配的例子 12345678,123456789,12344321

不匹配的例子

只能輸入m到n個數字

表達式 ^\d{m,n}$ 例如^\d{7,8}$

描述 匹配m到n個數字

匹配的例子 12345678,1234567

不匹配的例子 123456,123456789

只能輸入數字

表達式 ^[0-9]*$

描述 匹配任意個數字

匹配的例子 12345678,1234567

不匹配的例子 E,清清月兒,http://blog.csdn.net/21aspnet

只能輸入某個區間數字

表達式 ^[12-15]$

描述 匹配某個區間的數字

匹配的例子 12,13,14,15

不匹配的例子

只能輸入0和非0打頭的數字

表達式 ^(0|[1-9][0-9]*)$

描述 可以爲0,第一個數字不能爲0,數字中可以有0

匹配的例子 12,10,101,100

不匹配的例子 01,清清月兒,http://blog.csdn.net/21aspnet

只能輸入實數

表達式 ^[-+]?\d+(\.\d+)?$

描述 匹配實數

匹配的例子 18,+3.14,-9.90

不匹配的例子 .6,33s,67-99

只能輸入n位小數的正實數

表達式 ^[0-9]+(.[0-9]{n})?$以^[0-9]+(.[0-9]{2})?$爲例

描述 匹配n位小數的正實數

匹配的例子 2.22

不匹配的例子 2.222,-2.22,http://blog.csdn.net/21aspnet

只能輸入m-n位小數的正實數

表達式 ^[0-9]+(.[0-9]{m,n})?$以^[0-9]+(.[0-9]{1,2})?$爲例

描述 匹配m到n位小數的正實數

匹配的例子 2.22,2.2

不匹配的例子 2.222,-2.2222,http://blog.csdn.net/21aspnet

只能輸入非0的正整數

表達式 ^\+?[1-9][0-9]*$

描述 匹配非0的正整數

匹配的例子 2,23,234

不匹配的例子 0,-4,

只能輸入非0的負整數

表達式 ^\-[1-9][0-9]*$

描述 匹配非0的負整數

匹配的例子 -2,-23,-234

不匹配的例子 0,4,

只能輸入n個字符

表達式 ^.{n}$ 以^.{4}$爲例

描述 匹配n個字符,注意漢字只算1個字符

匹配的例子 1234,12we,123清,清清月兒

不匹配的例子 0,123,123www,http://blog.csdn.net/21aspnet/

只能輸入英文字符

表達式 ^.[A-Za-z]+$爲例

描述 匹配英文字符,大小寫任意

匹配的例子 Asp,WWW,

不匹配的例子 0,123,123www,http://blog.csdn.net/21aspnet/

只能輸入大寫英文字符

表達式 ^.[A-Z]+$爲例

描述 匹配英文大寫字符

匹配的例子 NET,WWW,

不匹配的例子 0,123,123www,

只能輸入小寫英文字符

表達式 ^.[a-z]+$爲例

描述 匹配英文大寫字符

匹配的例子 asp,csdn

不匹配的例子 0,NET,WWW,

只能輸入英文字符+數字

表達式 ^.[A-Za-z0-9]+$爲例

描述 匹配英文字符+數字

匹配的例子 1Asp,W1W1W,

不匹配的例子 0,123,123,www,http://blog.csdn.net/21aspnet/

只能輸入英文字符/數字/下劃線

表達式 ^\w+$爲例

描述 匹配英文字符或數字或下劃線

匹配的例子 1Asp,WWW,12,1_w

不匹配的例子 3#,2-4,w#$,http://blog.csdn.net/21aspnet/

密碼舉例

表達式 ^.[a-zA-Z]\w{m,n}$

描述 匹配英文字符開頭的m-n位字符且只能數字字母或下劃線

匹配的例子

不匹配的例子

驗證首字母大寫

表達式 \b[^\Wa-z0-9_][^\WA-Z0-9_]*\b

描述 首字母只能大寫

匹配的例子 Asp,Net

不匹配的例子 http://blog.csdn.net/21aspnet/

驗證網址(帶?id=中文)VS.NET2005無此功能

表達式 ^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w-   .\/\?%&=\u4e00-\u9fa5]*)?)?$

描述 驗證帶?id=中文

匹配的例子 http://blog.csdn.net/21aspnet/,

http://blog.csdn.net?id=清清月兒

不匹配的例子

驗證漢字

表達式 ^[\u4e00-\u9fa5]{0,}$

描述 只能漢字

匹配的例子 清清月兒

不匹配的例子 http://blog.csdn.net/21aspnet/

驗證QQ號

表達式 [0-9]{5,9}

描述 5-9位的QQ號

匹配的例子 10000,123456

不匹配的例子 10000w,http://blog.csdn.net/21aspnet/

驗證電子郵件(驗證MSN號一樣)

表達式 \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

描述 注意MSN用非hotmail.com郵箱也可以

匹配的例子 [email protected]

不匹配的例子 111@1.   http://blog.csdn.net/21aspnet/

驗證身份證號(粗驗,最好服務器端調類庫再細驗證)

表達式 ^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$

描述

匹配的例子 15或者18位的身份證號,支持帶X的

不匹配的例子 http://blog.csdn.net/21aspnet/

驗證手機號(包含159,不包含小靈通)

表達式 ^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8}

描述 包含159的手機號130-139

匹配的例子 139XXXXXXXX

不匹配的例子 140XXXXXXXX,http://blog.csdn.net/21aspnet/

驗證電話號碼號(很複雜,VS.NET2005給的是錯的)

表達式(不完美) 方案一 ((\(\d{3}\)|\d{3}-)|(\(\d{4}\)|\d{4}-))?(\d{8}|\d{7})

方案二 (^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)    支持手機號但也不完美

描述 上海:02112345678    3+8位

上海:021-12345678

上海:(021)-12345678

上海:(021)12345678

鄭州:03711234567     4+7位

杭州:057112345678     4+8位

還有帶上分機號,國家碼的情況

由於情況非常複雜所以不建議前臺做100%驗證,到目前爲止似乎也沒有誰能寫一個包含所有的類型,其實有很多情況本身就是矛盾的。

如果誰有更好的驗證電話的請留言

匹配的例子

不匹配的例子

驗證護照

表達式 (P\d{7})|G\d{8})

描述 驗證P+7個數字和G+8個數字

匹配的例子

不匹配的例子 清清月兒,http://blog.csdn.net/21aspnet/

驗證IP

表達式 ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$

描述 驗證IP

匹配的例子 192.168.0.1    222.234.1.4

不匹配的例子

驗證域

表達式 ^[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\.(com|org|net|cn|com.cn|edu.cn|grv.cn|)$

描述 驗證域

匹配的例子 csdn.net   baidu.com it.com.cn

不匹配的例子 192.168.0.1

驗證信用卡

表達式 ^((?:4\d{3})|(?:5[1-5]\d{2})|(?:6011)|(?:3[68]\d{2})|(?:30[012345]\d))[ -]?(\d{4})[ -]?(\d{4})[ -]?(\d{4}|3[4,7]\d{13})$

描述 驗證VISA卡,萬事達卡,Discover卡,美國運通卡

匹配的例子

不匹配的例子

驗證ISBN國際標準書號

表達式 ^(\d[- ]*){9}[\dxX]$

描述 驗證ISBN國際標準書號

匹配的例子 7-111-19947-2

不匹配的例子

驗證GUID全球唯一標識符

表達式 ^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}$

描述 格式8-4-4-4-12

匹配的例子 2064d355-c0b9-41d8-9ef7-9d8b26524751

不匹配的例子

驗證文件路徑和擴展名

表達式 ^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$

描述 檢查路徑和文件擴展名

匹配的例子 E:\mo.txt

不匹配的例子 E:\ , mo.doc, E:\mo.doc ,http://blog.csdn.net/21aspnet/

驗證Html顏色值

表達式 ^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$

描述 檢查顏色取值

匹配的例子 #FF0000

不匹配的例子 http://blog.csdn.net/21aspnet/

在使用RegularExpressionValidator驗證控件時的驗證功能及其驗證表達式介紹如下:

匹配中文字符的正則表達式: [u4e00-u9fa5]

評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了

匹配雙字節字符(包括漢字在內):[^x00-xff]

評註:可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

匹配空白行的正則表達式:ns*r

評註:可以用來刪除空白行

匹配HTML標記的正則表達式:<(S*?)[^>]*>.*?|<.*? />

評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的嵌套標記依舊無能爲力

匹配首尾空白字符的正則表達式:^s*|s*$

評註:可以用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),非常有用的表達式

匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

評註:表單驗證時很實用

匹配網址URL的正則表達式:[a-zA-z]+://[^s]*

評註:網上流傳的版本功能很有限,上面這個基本可以滿足需求

匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

評註:表單驗證時很實用

匹配國內電話號碼:d{3}-d{8}|d{4}-d{7}

評註:匹配形式如 0511-4405222 或 021-87888822

匹配騰訊QQ號:[1-9][0-9]{4,}

評註:騰訊QQ號從10000開始

匹配中國郵政編碼:[1-9]d{5}(?!d)

評註:中國郵政編碼爲6位數字

匹配身份證:d{15}|d{18}

評註:中國的身份證爲15位或18位

匹配ip地址:d+.d+.d+.d+

評註:提取ip地址時有用

匹配特定數字:

^[1-9]d*$    //匹配正整數

^-[1-9]d*$   //匹配負整數

^-?[1-9]d*$   //匹配整數

^[1-9]d*|0$  //匹配非負整數(正整數 + 0)

^-[1-9]d*|0$   //匹配非正整數(負整數 + 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)$  //匹配浮點數

^[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)

評註:處理大量數據時有用,具體應用時注意修正

匹配特定字符串:

^[A-Za-z]+$  //匹配由26個英文字母組成的字符串

^[A-Z]+$  //匹配由26個英文字母的大寫組成的字符串

^[a-z]+$  //匹配由26個英文字母的小寫組成的字符串

^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字符串

^w+$  //匹配由數字、26個英文字母或者下劃線組成的字符串

在使用RegularExpressionValidator驗證控件時的驗證功能及其驗證表達式介紹如下:

只能輸入數字:“^[0-9]*$”

只能輸入n位的數字:“^d{n}$”

只能輸入至少n位數字:“^d{n,}$”

只能輸入m-n位的數字:“^d{m,n}$”

只能輸入零和非零開頭的數字:“^(0|[1-9][0-9]*)$”

只能輸入有兩位小數的正實數:“^[0-9]+(.[0-9]{2})?$”

只能輸入有1-3位小數的正實數:“^[0-9]+(.[0-9]{1,3})?$”

只能輸入非零的正整數:“^+?[1-9][0-9]*$”

只能輸入非零的負整數:“^-[1-9][0-9]*$”

只能輸入長度爲3的字符:“^.{3}$”

只能輸入由26個英文字母組成的字符串:“^[A-Za-z]+$”

只能輸入由26個大寫英文字母組成的字符串:“^[A-Z]+$”

只能輸入由26個小寫英文字母組成的字符串:“^[a-z]+$”

只能輸入由數字和26個英文字母組成的字符串:“^[A-Za-z0-9]+$”

只能輸入由數字、26個英文字母或者下劃線組成的字符串:“^w+$”

驗證用戶密碼:“^[a-zA-Z]w{5,17}$”正確格式爲:以字母開頭,長度在6-18之間,

只能包含字符、數字和下劃線。

驗證是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”

只能輸入漢字:“^[u4e00-u9fa5],{0,}$”

驗證Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”

驗證InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”

驗證電話號碼:“^((d{3,4})|d{3,4}-)?d{7,8}$”

正確格式爲:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,

“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。

驗證身份證號(15位或18位數字):“^d{15}|d{}18$”

驗證一年的12個月:“^(0?[1-9]|1[0-2])$”正確格式爲:“01”-“09”和“1”“12”

驗證一個月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”

正確格式爲:“01”“09”和“1”“31”。

匹配中文字符的正則表達式: [u4e00-u9fa5]

匹配雙字節字符(包括漢字在內):[^x00-xff]

匹配空行的正則表達式:n[s| ]*r

匹配HTML標記的正則表達式:/<(.*)>.*</1>|<(.*) />/

匹配首尾空格的正則表達式:(^s*)|(s*$)

匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

(1)應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

(2)應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現

String.prototype.trim = function()

{

return this.replace(/(^s*)|(s*$)/g, "");

}

(3)應用:利用正則表達式分解和轉換IP地址

function IP2V(ip) //IP地址轉換成對應數值

{

re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正則表達式

if(re.test(ip))

{

return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1

}

else

{

throw new Error("Not a valid IP address!")

}

}

(4)應用:從URL地址中提取文件名的javascript程序

s="http://www.9499.net/page1.htm";

s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm

(5)應用:利用正則表達式限制網頁表單裏的文本框輸入內容

用正則表達式限制只能輸入中文:οnkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'') "

onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-

u9FA5]/g,''))"

用正則表達式限制只能輸入全角字符: οnkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'') "

onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-

uFFFF]/g,''))"

用正則表達式限制只能輸入數字:οnkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste=

"clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

用正則表達式限制只能輸入數字和英文:οnkeyup="value=value.replace(/[W]/g,'')

"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/

[^d]/g,''

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章