Play框架中的自定义正则表达式验证 - Scala

时间:2014-06-23 13:50:56

标签: regex scala validation playframework playframework-2.3

我是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”)
 }

此外,我想将其与多个(链式/逐步)验证相结合,以便能够显示:

  1. 如果没有输入任何内容 - 请使用名字
  2. 如果第一个名称已被enetred且未通过正则表达式验证 - 请输入有效的名字
  3. 我想开发一个通用的解决方案,以便我可以将它用于所有领域。

    感谢任何帮助。

1 个答案:

答案 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
)