Regex 正则表达式验证-grails

Regex 正则表达式验证-grails,regex,grails,groovy,grails-constraints,Regex,Grails,Groovy,Grails Constraints,我对grails很陌生。。我现在在使用匹配项进行验证时遇到了一个小问题。我想做的是,一个字段可以接受字母数字和特殊字符的组合,只接受字母和数字,如果用户只输入特殊字符,系统应该提示用户一个错误。 我使用了匹配约束来验证数据,我很难设置regex,在这里字段将不接受仅包含特殊字符的输入。 请帮帮我。。非常感谢分享您的知识 我不知道grails是否支持,但如果它支持,这个正则表达式将适用于您: /(?=^[\pL\pN!:;]+$)(?!^[!:;]+$)/ 说明: /

我对grails很陌生。。我现在在使用匹配项进行验证时遇到了一个小问题。我想做的是,一个字段可以接受字母数字和特殊字符的组合,只接受字母和数字,如果用户只输入特殊字符,系统应该提示用户一个错误。 我使用了匹配约束来验证数据,我很难设置regex,在这里字段将不接受仅包含特殊字符的输入。
请帮帮我。。非常感谢分享您的知识

我不知道grails是否支持,但如果它支持,这个正则表达式将适用于您:

/(?=^[\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

我不知道grails是否支持,但如果支持,这个正则表达式将适用于您:

/(?=^[\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

我想我理解你的问题,但如果我错了,请纠正我。只要至少有一个字母或数字,输入就有效,对吗?换句话说,如果没有字母或数字(只有特殊字符),那么输入无效

看看这是否有效:

/^.*[A-Za-z0-9].*$/
下面是我的groovy小测试:

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

我想我理解你的问题,但如果我错了,请纠正我。只要至少有一个字母或数字,输入就有效,对吗?换句话说,如果没有字母或数字(只有特殊字符),那么输入无效

看看这是否有效:

/^.*[A-Za-z0-9].*$/
下面是我的groovy小测试:

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

AFAIK你不能只用一个正则表达式。