简体   繁体   English

Grails 2.5.0-约束为空或遵循验证

[英]Grails 2.5.0 - constraint be blank OR follow validation

I want to do something like: 我想做类似的事情:

class MyCommand {
     String name
     String data

     static constraints = {
         name blank: false, size: 3..64
         data (blank: true) || (blank: false, size: 3..64)
     }
}

where data is either blank or follows validation such as a size constraint if it is not blank. 其中的数据为空或如果不为空则遵循验证(例如大小限制)。 Is this possible to do without custom validation? 如果没有自定义验证,是否可以这样做?

It would be non-trivial to use other constraints within a validator constraint. 在验证程序约束中使用其他约束将是不平凡的。 The delegate of the constraints closure is a ConstrainedPropertyBuilder , which you can read to understand the complexity. 约束闭包的委托是ConstrainedPropertyBuilder ,您可以阅读该书以了解其复杂性。

But that doesn't matter because the EmailConstraint uses Apache's EmailValidator , which you can use in your validator. 但这没关系,因为EmailConstraint使用Apache的EmailValidator ,您可以在验证器中使用它。 Here's the EmailValidator in action: 这是实际使用的EmailValidator:

@Grab('commons-validator:commons-validator:1.4.1')

import org.apache.commons.validator.routines.EmailValidator

def emailValidator = EmailValidator.getInstance();

assert emailValidator.isValid('what.a.shame@us.elections.gov')
assert !emailValidator.isValid('an_invalid_emai_address')

You can use EmailValidator in your own validator like this: 您可以在自己的验证器中使用EmailValidator,如下所示:

import org.apache.commons.validator.routines.EmailValidator

class MyCommand {
     String name
     String data

     static constraints = {
         name blank: false, size: 3..64
         data validator: {
             if(it) {
                 EmailValidator
                     .getInstance()
                     .isValid(it)
             } else { true }
         }
     }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM