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);

獲得post

map[username:[postname go]

發生衝突的字段,值會被保存成爲slice。
在取值的時候有兩種方法。
r.Form能夠取到鍵所對應的所有值。但若是鍵不存在則會報錯。通常單選框或複選框,在不選中的狀況下,form表單根本不會提交這些字段,因此很容易出現r.Form獲取鍵不存在的字段。
r.Form.GET只可以拿到字段中的第一個值。若是鍵不存在,不會報錯,會返回空值。
對比不難發現,通常單選框和複選框等字段須要r.Form.GET方法獲取,而會出現多值的字段則須要用r.Form的方式獲取。code


言歸正傳,此次想說一些關於表單驗證的方法。表單驗證通常前端後端都會作,不過區別是,「前端防君子,後端防小人」。regexp

必填字段

if len(r.Form["username"][0])==0{
    //爲空的處理
}

數字

getint,err:=strconv.Atoi(r.Form.Get("age"))//字符串轉整
if err!=nil{
    //數字轉化出錯了,那麼可能就不是數字
}

//接下來就能夠判斷這個數字的大小範圍了
if getint >100 {
    //太大了
}

或是使用正則orm

if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m {
    return false
}

還有不少驗證,都有不止一種方法可以達到驗證效果,再也不一一贅述了。字符串

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息