我在 grails 中很新。我现在在使用匹配进行验证时遇到了一个小问题。我想要发生的是一个字段可以接受字母数字和特殊字符的组合,只有字母和数字,如果用户只输入特殊字符,系统应该提示用户错误。我使用匹配约束来验证数据,并且我很难设置正则表达式,该字段将不接受仅包含特殊字符的输入。请帮助我..非常感谢您分享您的知识。
问问题
5726 次
2 回答
3
我想我理解你的问题,但如果我错了,请纠正我。只要至少有 1 个字母或数字,输入就有效,对吧?换句话说,如果没有字母或数字(只有特殊字符),那么输入无效?
看看这是否有效:
/^.*[A-Za-z0-9].*$/
这是我的小常规测试:
import java.util.regex.Matcher
import java.util.regex.Pattern
def pattern = ~/^.*[A-Za-z0-9].*$/
assert pattern.matcher("abc").matches()
assert pattern.matcher("ABC").matches()
assert pattern.matcher("abc123").matches()
assert pattern.matcher("123").matches()
assert pattern.matcher("abc!").matches()
assert pattern.matcher("!abc").matches()
assert pattern.matcher("1!bc").matches()
assert pattern.matcher("!.~").matches() == false
解释:
/ regex start
^ start of string
.* any character (0 or more times)
[A-Za-z0-9] at least 1 letter or number
.* any character (0 or more times)
$ end of string
/ regex end
于 2012-02-24T19:52:38.797 回答
1
我不知道 grails 是否支持lookaround,但如果支持,此正则表达式将为您工作:
/(?=^[\pL\pN!:;]+$)(?!^[!:;]+$)/
解释:
/ : regex delimiter
(?= : begin positive lookahead
^ : start of string
[\pL\pN!:;]+ : a letter, a digit or a special char one or more times
$ : end of string
) : end of lookahead
(?! : begin negative lookahead
^ : start of string
[!:;]+ : a special char one or more times
$ : end of string
) : end of lookahead
/ : regex delimiter
于 2012-02-24T10:13:22.150 回答