2012-02-24 7 views
0

私はかなりgrailsで新しいです。私がしたいのは、フィールドは英数字と特殊文字、英字と数字のみの組み合わせを受け入れることができ、ユーザーが特殊文字のみを入力すると、システムはユーザーにエラーを表示する必要があります。 私は制約を使ってデータを検証しましたが、苦労しましたが、フィールドが特殊文字だけの入力を受け付けない正規表現をどのように設定することができましたか? あなたの知識を共有してくれてありがとう。正規表現バリデーション - grails

+0

を一つだけ正規表現でこれを行うことはできません私の知る限り。 – m0skit0

答えて

2

私は私はあなたの問題を理解すると思います私が間違っていれば私を修正してください。少なくとも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 
+0

これは動作します!共有していただきありがとうございます。 – antibry

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