オプションの10進数の2桁を使用した6桁の数値の正規表現が必要です 。許可される値:
.1 .11 0.11 10. 10.1 10.12 00.00 0.0 00.00
123456 12345 1234 123 12 1 0 0. 123. 123.55 123456.
オプションの10進数の2桁を使用した6桁の数値の正規表現が必要です 。許可される値:
.1 .11 0.11 10. 10.1 10.12 00.00 0.0 00.00
123456 12345 1234 123 12 1 0 0. 123. 123.55 123456.
正規表現は次のようになります: ^\d{0,6}(\.\d{0,2})?$
(すべてのサンプルに合格しました)
アップデート:
空の文字列と単一のドットを避けるために、正規表現は^(?!\.?$)\d{0,6}(\.\d{0,2})?$
. ?!\.?$
この式は、 0 または 1 つのドットを除外する負の先読みを追加します。
Fiddleに単体テストを追加しました。
これを 4 つの正規表現に分解してみましょう。これら 4 つのうち少なくとも 1 つが一致する必要があります。
# decimal, 1-2 digits
\.\d{1,2}
# 1-4 digits, optional decimal, 0-2 digits
\d{1,4}\.?\d{0,2}
# 5 digits, optional decimal, optional digit
\d{5}\.?\d?
# 6 digits, optional decimal
\d{6}\.?
これは、代替演算子( |
)を使用して単一の正規表現に組み合わせることができます。
(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)
次にキャレット ( ^
) とスティック ( $
) を追加して、文字列の先頭と末尾を一致させます。
^(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)$
これはうまくスケーリングできません (たとえば、100 桁を小数点以下 20 桁まで一致させたい場合) が、機能し、比較的理解しやすいものです。
正規表現を使用する必要がない場合は、この問題を解決する簡単な方法があります。:)
これはあなたのすべての例と一致しており、6桁または2桁を超えるものは受け入れません。
^\d{0,5}(\d\.\d?|\.\d)?\d?$
最大長が 10 の文字列を検証するための簡単な Java の例、つまり最大 3 桁の 9 桁 注: なぜ 10 桁ではなく 9 桁なのですか? 小数点も文字としてカウントされるため
package com.baji.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
/*
* @author: Baji Shaik
* Quick java example for validating string with max length as 10
* i.e. 9 digits with max 3 decimal
* NOTE: why 9 digits instead of 10 digits? because the decimal point also count as a character
*/
public class CheckNumber {
@Test
public void testSimpleTrue() {
String s= "12345678.1";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s= "1234567.12";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "123456.123";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "123456789";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "1234567891";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = ".123";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
s = "000000.123";
assertTrue(Validate10DigitsWithMax3DecimalsNumber(s));
}
public static boolean Validate10DigitsWithMax3DecimalsNumber(String value){
Pattern pattern = Pattern.compile("^(\\.\\d{1,3}|\\d{1,6}\\.\\d{1,3}|\\d{1,7}\\.\\d{1,2}|\\d{1,8}\\.\\d{1}|\\d{1,10})$");
Matcher matcher = pattern.matcher(value);
if (matcher.find()){
return true;
}
return false;
}
}