2

我在 grails 中很新。我现在在使用匹配进行验证时遇到了一个小问题。我想要发生的是一个字段可以接受字母数字和特殊字符的组合,只有字母和数字,如果用户只输入特殊字符,系统应该提示用户错误。我使用匹配约束来验证数据,并且我很难设置正则表达式,该字段将不接受仅包含特殊字符的输入。请帮助我..非常感谢您分享您的知识。

4

2 回答 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 回答