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
}

还有不少验证,都有不止一种方法可以达到验证效果,再也不一一赘述了。字符串

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息