我是Play 2.3.x和Scala的新手,并尝试实现表单输入验证。
我们假设我有一个示例表单。
val userForm = Form(
"firstName" -> nonEmptyText
)
我想为名字字段实现类似的内容:
If a regex for first name (say firstName.regex = “regex for first name” ) is defined then {
Validate first name against specific regex
}else{
Validate against the global regex ( say global.regex = “global regex white list some regex valid for across the application”)
}
此外,我想将其与多个(链式/逐步)验证相结合,以便能够显示:
我想开发一个通用的解决方案,以便我可以将它用于所有领域。
感谢任何帮助。
答案 0 :(得分:6)
您可以使用verifying
。
val userForm = Form(
"firstName" -> nonEmptyText.verifying("Must contain letters and spaces only.", name => name.isEmpty || name.matches("[A-z\\s]+") )
)
那里有一点额外的逻辑(name.isEmpty
带OR),因为空字符串会触发两个验证错误。 似乎就像验证错误按照它们被触发的顺序保存一样,因此您可能能够在序列中使用第一个验证错误,但不要错过抱着我。您可以根据需要将verifying
个链接起来。
我并不完全确定您的想法是通过使这些更通用,但您可以通过编写Mapping
对象中现有的验证器来创建自己的Forms
验证器。
val nonEmptyAlphaText: Mapping[String] = nonEmptyText.verifying("Must contain letters and spaces only.", name => name.matches("[A-z\\s]+") )
然后您可以在Form
:
val userForm = Form(
"firstName" -> nonEmptyAlphaText
)