表單驗證|設計|表單驗證 一般的動態網站需要通過表單來收集使用者資訊,或者實現與使用者的互動,雖然我們相信絕大多數人士既然選擇了填寫表單就會認真的完成,但是亦不能避免無聊人士亂填表單,況且即使一個正常使用者在填寫過程中也會無意識的出現一些填寫錯誤,或者他們忘記了填某些選項。通常為了避免這種情況,開發人員會給表單加一個驗證的過程,在表單資料提交到伺服器之前或者伺服器之後對使用者填寫的資料進行驗證,若遇到錯誤的填寫則返回要求使用者進行更正。
在ASP中程式員們一般是這樣做的:
1、用JavaScript在用戶端進行驗證。
2、用VBscript在用戶端進行驗證。
3、用VBScript在伺服器端進行驗證。
上面提到了兩個不同的環境,伺服器端和用戶端,用戶端驗證實際上就是包含在已下載的頁面中,當使用者提交表單時候,它直接在已下載到本地的頁面中調用script來進行驗證,這樣可以減少伺服器端的運算。而伺服器端的驗證則是將頁面提交到伺服器處理,伺服器上的另一個ASP頁面先執行對錶單的驗證,然後再返回結果到用戶端。這樣的缺點是每一次驗證都要經過伺服器,消耗時間較長。但是利用伺服器端驗證卻可以達到較好的驗證功能。
本文就是主要講述ASP中在伺服器端的驗證。
在瞭解以下介紹方法之前,你需要想想在表單驗證問題中會遇到哪些需要值得我們控制的地方。就像軟體工程思想一樣,先分析一下要在哪些方面進行驗證。
1、要求使用者的輸入必須是中文(英文或數字)。
2、要求使用者的輸入必須是有效郵件地址。
3、對使用者輸入的資料進行各種不同的限制。
4、限制使用者輸入的資料量。
5、....
實際上我們在網站設計中還會因情況不同而遇到其它很多不同的問題,需要我們自己去定義一些規定和限制。
下面我們以執行個體來講述驗證方法。
1、驗證輸入的數字
假設一個文字框
<form name="form1" method="post" action="">
<input type="text" name="textfield">
</form>
’要求使用者必須輸入數字
if not isnumeric(Request.Form("textfield")) then
response.write "重新填寫"
end if
’要求限制數字長度,如你要使用者輸入oicq號碼
’此例限制了使用者的輸入只有為4到10位元字才有效
if len(Request.Form("textfield"))>10 or len(Request.Form("textfield"))<4 then
response.write "重新填寫"
end if
當然上面用Request.Form和Request是一樣的,隨便你怎么寫了。
2、驗證使用者輸入的郵件地址
’引用一段通用檢測函數來說明
’由於檢驗程式較長,將其定義為一函數來調用
function IsValidEmail(email)
dim names, name, i, c
’Check for valid syntax in an email address.
IsValidEmail = true
names = Split(email, "@")
if UBound(names) <> 1 then
IsValidEmail = false
exit function
end if
for each name in names
if Len(name) <= 0 then
IsValidEmail = false
exit function
end if
for i = 1 to Len(name)
c = Lcase(Mid(name, i, 1))
if InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 and not IsNumeric(c) then
IsValidEmail = false
exit function
end if
next
if Left(name, 1) = "." or Right(name, 1) = "." then
IsValidEmail = false
exit function
end if
next
if InStr(names(1), ".") <= 0 then
IsValidEmail = false
exit function
end if
i = Len(names(1)) - InStrRev(names(1), ".")
if i <> 2 and i <> 3 then
IsValidEmail = false
exit function
end if
if InStr(email, "..") > 0 then
IsValidEmail = false
end if
end function
’上面的這段函數大家應該都看的懂,當然你可以修改這段代碼,使得即使使用者輸入XXX@CCC.DDD是錯誤的郵件地址,因為DDD不是一個有效網域名稱。
’引用的時候可以這樣寫
if IsValidEmail(trim(request("textfield")))=false then
response.write "重新填寫"
end if
3、驗證為空白的表單單元
有的資訊是要求使用者必須填寫的,所以不允許為空白,因此當使用者輸入為空白的時候需要提示。
’對為空白單元的處理
if Request.Form("textfield")="" then
Response.write "填寫為空白"
end if
4、判斷使用者輸入的是不是一個日期
首先明白日期值格式2002-11-19
’直接判斷一個值是否是日期
if not isdate(Request.Form("textfield")) then
Response.write "日期填寫出錯"
end if
而我們在設計網站時候往往用三個下拉框來實現年、月、日三個不同選項,如何將這三個值聯絡起來,並且進行驗證呢?
首先當然要建立三個下拉框了,分別命名表單名為date,month,year,然後就是背景處理了,因為先前我們在前台擷取了date,month,year這三個傳遞過來的值,所以我們必須把他們串連起來合成一個變數才能驗證和存入資料庫。串連成標準日期格式運算式可以這么寫:
birthday=trim(Request.Form("year"))&"-"&trim(Request.Form("month"))&"-"&trim(Request.Form("date"))
驗證已經轉換的輸入是否為合法日期可以使用isdate函數:
if not isdate(birthday) then
response.write "錯誤"
end if
5、不允許使用者輸入某些特殊字元
在這裡我們假設傳遞的值是content,我們不允許輸入的值是=和%
if Instr(request("content"),"=")>0 or Instr(request("content"),"%")>0
then
response.write "不能輸入=和%"
end if