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

Swa*_*nil 11 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.  
Run Code Online (Sandbox Code Playgroud)

Hui*_*eng 13

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

更新:

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

我在Fiddle上添加了一个单元测试.

  • 匹配空字符串和`.`.也匹配`123456.78` - 应该吗? (2认同)

Pat*_*ney 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}\.?
Run Code Online (Sandbox Code Playgroud)

然后可以使用交替运算符(|)将其组合成单个正则表达式:

(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)
Run Code Online (Sandbox Code Playgroud)

然后添加一个caret(^)和stick($)来匹配字符串的开头和结尾.

^(\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?)$
Run Code Online (Sandbox Code Playgroud)

这不能很好地扩展(例如,如果你想匹配小数点后最多20位的100位数字)但它的工作原理相对容易理解.

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


Teu*_*ndo 2

此 re 与您的所有示例相匹配,并且不接受超过 6 位数字或 2 位小数。

^\d{0,5}(\d\.\d?|\.\d)?\d?$
Run Code Online (Sandbox Code Playgroud)

  • 匹配空字符串和 `123456.78` - 应该吗? (2认同)