随着区块链引发的“颠覆风暴”,大量区块链培训机构应运而生。但在鱼龙混杂的培训圈内,要想找到真正符合标准的课程体系与专属区块链领域的专业授课讲师简直是沧海一粟,千锋扣丁学堂在线区块链培训做出行动改变并颠覆传统培训机构运营思维,并提醒大众用户,应理性选择区块链培训机构。
![65444.jpg](https://static.studygolang.com/180831/1c1b133738c7ae501d40a17d6e8ac9d4.jpg)
Web开发中最重要的原则之一是您不能信任客户端用户表单中的任何内容。
您必须在使用之前验证所有传入数据。
许多网站都受到这个问题的影响,这个问题既简单又至关重要。
有两种方法可以验证常用的表单数据。
第一个是前端的JavaScript验证,第二个是后端的服务器验证。
本次只分享Web开发中的服务器端验证。
必填字段
有时我们要求用户输入一些字段,但他们无法完成该字段。可以使用len函数来获取字段的长度,以确保用户输入了某些内容。在ArticleSave方法中加入如下代码
iflen(r.Form["author"][0])==0{
fmt.Println("authorisempty")
http.Redirect(w,r,"/view/"+title,http.StatusFound)
}
当提交的时候我们不给author赋值,然后点击Submit提交,会看到输出如下内容
author:[]
authorisempty
r.Form在空白时对待不同的表单元素类型。
对于空文本框,文本区域和文件上传,它返回一个空字符串;
对于单选按钮和复选框,它甚至不会创建相应的项目。
相反,如果您尝试访问它,您将收到错误。
因此,使用r.Form.Get()获取字段值更安全,因为如果该值不存在,它将始终返回空。
另一方面,r.Form.Get()一次只能获得一个字段值,因此您需要使用r.Form来获取值的映射。我们修改下刚才那段代码如下
iflen(r.Form.Get("author"))==0{
fmt.Println("authorisempty")
http.Redirect(w,r,"/view/"+title,http.StatusFound)
}
当提交的时候我们不给author赋值,然后点击Submit提交,会看到输出如下内容
author:[]
authorisempty
得到的结果跟上段代码是一致的
数字
有时我们需要提交过来的数据是数字而不是字段值等其他文本。
例如,假设我们只需要整数形式的用户年龄,即50或10,而不是“足够老”或“年轻人”。
如果我们需要一个正数,我们可以先将值转换为int类型,然后再处理它。下面我们在ArticleSave方法中加入如下代码
getint,err:=strconv.Atoi(r.Form.Get("author"))
iferr!=nil{
fmt.Println(err)
http.Redirect(w,r,"/view/"+title,http.StatusFound)
}
fmt.Println("getint:",getint)
当提交的时候我们给author赋值durban,然后点击Submit提交,会看到输出如下内容
author:[durban]
strconv.Atoi:parsing"durban":invalidsyntax
当提交的时候我们给author赋值10,然后点击Submit提交,会看到输出如下内容
author:[10]
getint:10
另一种方法是使用正则表达式。
代码如下,我们将上面的代码段更换如下
ifm,_:=regexp.MatchString("^[0-9]+$",r.Form.Get("author"));!m{
fmt.Println("非整数")
http.Redirect(w,r,"/view/"+title,http.StatusFound)
return
}
fmt.Println("getauthor:",r.Form.Get("author"))
当提交的时候我们给author赋值10,然后点击Submit提交,会看到输出如下内容
author:[10]
getauthor:10
出于高性能目的,正则表达式效率不高,但简单的正则表达式通常足够快。
如果您熟悉正则表达式,那么这是验证数据的一种非常方便的方法。
请注意,Go使用[RE2],因此支持所有UTF-8字符。RE2是一种快速,安全,线程友好的替代方法,用于回溯正则表达式引擎,如PCRE,Perl和Python中使用的那些。
有疑问加站长微信联系(非本文作者)