次の形式を検証する Java (java.util.regex) で使用する有効な正規表現を取得しようとしています。
最大 15 桁の数値。そのうち 3 桁までは小数で、先頭に区切り文字 (,) が付きます。
したがって、有効なのは次のとおりです。
123456789012345 (15 digits, ok)
12345678901234,1
[編集]、これらも有効である必要があります:
1234567890123,45
123456789012,345
これまでのところ、次の正規表現パターンを思いつきました:
Pattern = [0-9]{1,15}(\,[0-9]{1,3})?
これは、1 ~ 15 桁の範囲をチェックし、その後にオプションの区切り文字が続き、さらに 3 桁が続きます。ただし、これは入力の全長をチェックしません。この正規表現では、123456789012345,123 の値が有効です。
したがって、合計の長さをチェックする式を追加し、「(?=」構造を使用して論理 AND 動作をシミュレートすると考えました。
そこで、次のように既存の正規表現にそれを追加することから始めました。
Pattern = (?= [0-9]{1,15}(\,[0-9]{1,3})?)
ただし、これにより、基本的に私が投げたすべてが失敗し、それ以上機能しなくなります。ここで何が間違っているのかわかりませんか?これが機能した後、合計の長さを確認する別の式を追加します (?=.{16}) のようなものだと思います。