我现在正在从事一个 grails 项目,并且我很难使用正则表达式来过滤我想要的所需数据。事情就是这样,我有一个字段可以接受所有字母和数字(大写和小写)以及键盘上的所有特殊字符(@*$)。它仅接受数字和字母的组合 (0925abc) 或字母、数字和特殊字符的组合 (0925abc?><)。如果输入的是纯字母(adCbT)、纯数字(0383)或纯特殊字符(@#$>_+-),系统将拒绝输入。这可能与 grails 中的正则表达式约束有关吗?感谢您分享您的知识。
最佳答案
所以,如果您只是在寻找适合您的约束的正则表达式,例如
'.*([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)
}
关于正则表达式约束验证-grails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10408188/