2

imはgrailsでかなり新しいです..imは、一致を使用した検証で現在少し問題があります。私が望んでいたのは、フィールドが英数字と特殊文字の組み合わせ、文字のみと数字のみを受け入れることができ、ユーザーが特殊文字のみを入力した場合、システムはユーザーにエラーを表示する必要があるということです。一致制約を使用してデータを検証しましたが、フィールドが特殊文字のみの入力を受け入れない正規表現を設定するにはどうすればよいでしょうか。私を助けてください..あなたの知識を共有してくれてありがとう。

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がルックアラウンドをサポートしているかどうかはわかりませんが、サポートしている場合は、この正規表現が機能します。

/(?=^[\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 に答える