GO隨筆-表單驗證
新發現:r.Form
裡面包含了所有請求的引數,比如URL中query-string、POST的資料、PUT的資料,所有當你在URL的query-string欄位和POST衝突時,會儲存成一個slice,裡面儲存了多個值
舉個例子:
<form action="/login?username=go" method="post">//get方法傳遞username=go 使用者名稱:<input type="text" name="username">//用post方法傳遞username
在提交表單後,列印r.Form
fmt.Println(r.Form);
map[username:[postname go]
發生衝突的欄位,值會被儲存成為slice。
在取值的時候有兩種方法。
r.Form
可以取到鍵所對應的全部值。但如果鍵不存在則會報錯。一般單選框或複選框,在不選中的情況下,form表單根本不會提交這些欄位,所以很容易出現r.Form
獲取鍵不存在的欄位。
r.Form.GET
只能夠拿到欄位中的第一個值。如果鍵不存在,不會報錯,會返回空值。
對比不難發現,一般單選框和複選框等欄位需要r.Form.GET
方法獲取,而會出現多值的欄位則需要用r.Form
的方式獲取。
言歸正傳,這次想說一些關於表單驗證的方法。表單驗證一般前端後端都會做,不過區別是,“前端防君子,後端防小人”。
必填欄位
if len(r.Form["username"][0])==0{ //為空的處理 }
數字
getint,err:=strconv.Atoi(r.Form.Get("age"))//字串轉整 if err!=nil{ //數字轉化出錯了,那麼可能就不是數字 } //接下來就可以判斷這個數字的大小範圍了 if getint >100 { //太大了 }
或是使用正則
if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m { return false }
還有很多驗證,都有不止一種方法能夠達到驗證效果,不再一一贅述了。