言語は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)