【问题标题】:regex constraints validation- grails正则表达式约束验证 - grails
【发布时间】:2012-05-02 05:30:00
【问题描述】:

我现在正在从事一个 grails 项目,我很难使用正则表达式来过滤我想要的所需数据。事情就是这样,我有一个字段可以接受所有字母和数字(大写和小写),以及键盘上的所有特殊字符(@*$)。只有当输入是数字和字母的组合 (0925abc) 或字母、数字和特殊字符的组合 (0925abc?>_+-),系统将拒绝输入。这可能与grails中的正则表达式约束有关吗?感谢您分享您的知识。

【问题讨论】:

  • 这是w.r.t吗?域类字段?您是否尝试过使用验证器? grails.org/doc/latest/ref/Constraints/validator.html
  • 是的,但我认为如果我为此使用验证器会很浪费。我相信使用正则表达式验证会容易得多,我只是对如何使用它感到困惑。
  • 如果您打算跨所有实例执行此操作,则该操作本身非常有效。此外,正则表达式在这里的工作方式与其他任何地方一样。无论如何,你能给出一个代码示例吗?没有看到任何示例代码很难解决您的问题。
  • 那么,您正在寻找的是一个检查您的约束的单一正则表达式,不是吗?

标签: regex validation grails constraints


【解决方案1】:

因此,如果您只是在寻找适合您的限制的正则表达式,例如

'.*([a-zA-Z][0-9@*$&#]+|[0-9][a-zA-Z@*$&#]|[@*$&#][0-9a-zA-Z]).*'

应该可以解决问题。它确保您的输入中至少有一个从一个字符类到另一个字符类的转换。

使用负前瞻,它甚至更容易维护

'^(?![a-zA-Z]+$)(?![0-9]+$)(?![@*$&#]+$).+$'

这三个术语确保输入不只包含来自一个字符类的字符。

这里有一些测试表达式的代码:

def ok = ['asdasd90','90asdas','asd#sdfsd9','asd9sdf','908787#@']
def nok = ['asdewSDFDSFasd','23803','@*$&#']
def expression = '^(?![a-zA-Z]+$)(?![0-9]+$)(?![@*$&#]+$).+$'
ok.each { value ->
    assert value.matches(expression)
}
nok.each { value ->
    assert !value.matches(expression)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2017-03-10
    相关资源
    最近更新 更多