0

私の grails アプリケーションの試験評価フィールドの正しい正規表現を書くことに関して問題があります。ユーザーは、アルファベットまたは数字のいずれかを入力するオプションが必要です。定量的評価は 0 ~ 100 の範囲で、パーセント記号 (%) の有無にかかわらず 10 進数を受け入れますが、負の数は除外します。正規表現では、特殊文字のパーセンテージ (%) とピリオド (.) のみを許可する必要があります。以下は、可能な入力のセットです。

1) 100% (should pass the validation)
2) 100.0 (should pass the validation)
3) PASSED (should pass the validation)
4) FAILED (should pass the validation)
5) 100.1 (should not pass the validation)
6) -90 (should not pass the validation)

あなたの答えは高く評価されます。

ありがとう!

4

2 に答える 2

2

言語はJavaだと思います。また、パーセンテージのみが含まれていることを期待するユーザー入力を検証する必要があると仮定します。

"^\\s*((100(\\.0*)?|\\d{1,2}(\\.\\d*)?|\\.\\d+)%?|PASSED|FAILED)\\s*$"

(Groovy では、バックスラッシュをエスケープする必要はありません)

/^\s*((100(\.0*)?|\d{1,2}(\.\d*)?|\.\d+)%?|PASSED|FAILED)\s*$/ (for Groovy)

上記の正規表現は、0.0 から 100.0 までの数値のみを検証します。小数点以下の任意の長い桁数を許可し、.8またはなどの場合45.も処理できるため、渡すことができます。正規表現では、入力の前後に任意の量のスペースを使用できます (ただし、内部には使用できません)。

編集

プレーン テキスト (ASCII) に一致させるには:

"^\\s*((100(\\.0*)?|\\d{1,2}(\\.\\d*)?|\\.\\d+)%?|[a-zA-Z.]+)\\s*$"

/^\s*((100(\.0*)?|\d{1,2}(\.\d*)?|\.\d+)%?|[a-zA-Z.]+)\s*$/ (for Groovy)

これは、英語のアルファベット文字 (大文字と小文字を区別しない) および完全なピリオドを使用するテキストと一致します。たとえばsdhSDFHS.sfSDJF.sdfSDJFI、上記の正規表現に一致します。現在の正規表現ではテキスト内にスペースを使用できませんが、さらに文字を追加する場合は、角かっこ (文字クラス) 内に追加してください: [a-zA-Z.]. 詳細については、ドキュメントを確認してください。

コードのテスト(Java 用)

String arr[] = {"100%", "  .435%", "3%", "0%", "0", ".0", "hdfjs.", "  PASSED", "FAILED", "34.5  ", "sdhf.sdfdsf.fsdf  ", " 100.0000 ", "-234.4", "-0.1", "34.", "100.0000001", "1000"};
for (String s: arr) 
    System.out.println(s + " " + (s.matches("^\\s*((100(\\.0*)?|\\d{1,2}(\\.\\d*)?|\\.\\d+)%?|[a-zA-Z.]+)\\s*$") ? "matched" : "not matched"));

出力

100% matched
  .435% matched
3% matched
0% matched
0 matched
.0 matched
hdfjs. matched
  PASSED matched
FAILED matched
34.5   matched
sdhf.sdfdsf.fsdf   matched
 100.0000  matched
-234.4 not matched
-0.1 not matched
34. matched
100.0000001 not matched
1000 not matched

EDIT2

ディスカッションで言及されている要件の変更: パーセンテージを含めて 1.0 から 100.0 までのみ一致します。

/^\s*((100(\.0*)?|[1-9]\d?(\.\d*)?)%?|[a-zA-Z.]+)\s*$/ (for Groovy)

01.1一致しないため、この条件は以前よりもさらに厳しくなっています。このケースに一致させたい場合:

/^\s*(0*((100(\.0*)?|[1-9]\d?(\.\d*)?)%?)|[a-zA-Z.]+)\s*$/ (for Groovy)
于 2012-06-15T03:38:08.653 に答える
1

100.1 は意味がありません。ただし、残りの場合はこれを使用できます。

^\d+\)\s*(PASSED|FAILED|0*(100(\.0+)?|[0-9]{1,2}(\.\d+)?)%?)$
于 2012-06-15T03:32:12.333 に答える