正则表达式为6位数字,可选2位十进制数字

时间:2013-01-28 14:39:35

标签: regex stringtokenizer

我需要一个6位数字的正则表达式,可选2位十进制数字 允许值:

    .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.  

4 个答案:

答案 0 :(得分:13)

正则表达式应该是:^\d{0,6}(\.\d{0,2})?$(它传递了所有样本)

更新

为避免空字符串和单点,正则表达式为^(?!\.?$)\d{0,6}(\.\d{0,2})?$。该表达式添加了一个负向前瞻?!\.?$,它排除了0或1个点。

我在Fiddle上添加了单元测试。

答案 1 :(得分:5)

让我们把它分成四个正则表达式。这四个中至少有一个必须匹配。

# 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}\.?

然后可以使用alternation operator|)将其组合成单个正则表达式:

(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)

然后添加一个插入符号^)并粘贴($)到match the beginning and end of the string

^(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)$

这不能很好地扩展(例如,如果你想匹配小数点后最多20位的100位数字)但是它有效并且相对容易理解。

如果您不必使用正则表达式,则有更简单的方法可以解决此问题。 :)

答案 2 :(得分:2)

这个r.e.匹配您的所有示例,并且不接受超过6位数或2位小数。

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

答案 3 :(得分:0)

用于验证最大长度为10的字符串的快速java示例 即9位数,最多3位小数 注意:为什么9位而不是10位?因为小数点也算作一个字符

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; 
  }

}