Revel框架中表单校验需在控制器内链式调用Validation方法,依次完成必填、最小长度、最大长度及正则匹配四重校验,失败后须调用Keep()持久化错误并FlashParams()回填参数,模板中通过.errors.username.Message安全渲染。

在Revel框架中为表单字段添加必填、长度限制与正则格式校验,需直接在控制器方法内调用Validation上下文的链式方法,每项验证失败后自动存入错误键值对,供模板渲染时按字段名提取。
设置用户名字段的四重校验规则
这一步操作起来很简单,直接把验证语句写在参数接收之后、业务逻辑之前即可。
第一步:调用c.Validation.Required(username)确保字段非空;若为空,【该验证会以"username"为key存入Validation上下文】,后续模板中可通过.errors.username.Message取到默认提示。
第二步:执行c.Validation.MinSize(username, 4)限定最小长度为4个字符;注意此处不校验Unicode宽度,纯按字节计数,中文或emoji可能被截断——如需按字符数校验,须改用自定义正则。
第三步:执行c.Validation.MaxSize(username, 15)限定最大长度为15个字符;该限制作用于原始传入参数,不会因前后空格自动trim,务必提醒前端做预处理或服务端先strings.TrimSpace。
第四步:调用c.Validation.Match(username, regexp.MustCompile("^\w*$"))强制仅允许字母、数字与下划线;正则必须编译后传入,否则运行时报panic。
触发验证失败后的标准响应流程
当任意一条验证未通过时,必须显式拦截流程,否则非法数据会继续进入业务逻辑。
方法一:使用c.Validation.HasErrors()判断是否有错误;它只检查当前Validation上下文中是否含error条目,不关心具体是哪个字段。
方法二:确认有错后,立即执行c.Validation.Keep()将错误持久化进Flash cookie;【若跳过此步,重定向后.errors将为空】。
方法三:紧接着调用c.FlashParams()保存当前请求参数,使表单重载时input能回填原值;最后return c.Redirect(Hotels.Settings)跳转至原页面。
在模板中安全渲染错误信息
模板里不能假设.errors一定存在,必须先判空再取值。
在输入框下方添加{{if .errors.username}}<span class="error">{{.errors.username.Message}}</span>{{end}};这段代码只会当username字段出错时才显示对应提示。
如果想统一在表单顶部展示全部错误,可用{{range .errors}}{{.Message}}<br>{{end}},但要注意此时丢失了字段粒度,无法定位具体哪个输入框有问题。


















