2

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

4

1 回答 1

2

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

'.*([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)
}
于 2012-05-02T09:05:25.007 回答