web-dev-qa-db-ja.com

オプションの10進数の2桁を含む6桁の数値の正規表現

オプションの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.  
11
Swapnil

正規表現は次のようになります:^\d{0,6}(\.\d{0,2})?$(すべてのサンプルに合格しました)

更新:

空の文字列と単一のドットを避けるために、正規表現は^(?!\.?$)\d{0,6}(\.\d{0,2})?$です。式は負の先読みを追加します?!\.?$、0または1ドットを除外します。

Fiddle にユニットテストを追加しました。

13
Hui Zheng

それを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桁まで一致させたい場合)、機能し、比較的理解しやすいです。

正規表現を使用する必要がない場合は、この問題を解決する簡単な方法があります。 :)

5

このr.e.はすべての例に一致し、6桁または小数点以下2桁を超えることはできません。

^\d{0,5}(\d\.\d?|\.\d)?\d?$
2
Teudimundo

クイックJava最大長が10の文字列、つまり最大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; 
  }

} 
0
Baji Shaik