2012-02-24 17 views
0

即時通訊在grails中很新穎..即時通過驗證使用匹配現在有一個小問題。我想要發生的情況是,一個字段可以接受字母數字和特殊字符,僅字母和數字的組合,並且如果用戶僅輸入特殊字符,則系統應提示用戶出現錯誤。 我使用匹配約束來驗證數據,並且即時通訊有困難時我怎麼能設置正則表達式,其中字段不會接受只有特殊字符的輸入。 請幫助我..非常感謝您分享您的知識。正則表達式驗證 - grails

+0

AFAIK你不能這樣做,只有一個正則表達式。 – m0skit0 2012-02-24 09:50:33

回答

2

我想我明白你的問題,但如果我錯了,請糾正我。只要至少有一個字母或數字,輸入就是有效的,對嗎?換句話說,如果沒有字母或數字(只有特殊字符),那麼輸入無效?

見,如果這個工程:

/^.*[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 
+0

這個作品!感謝你的分享。 – antibry 2012-02-29 02:02:17

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