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/,
不匹配的例子
驗證漢字
表達式 ^[\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,''