正则表达式匹配2位数,可选的十进制,两位数

时间:2009-06-18 18:08:18

标签: regex

我花了半个小时才想到这个,也许有人可以快点拿出来。

我需要一个匹配一个或两个数字的正则表达式,后跟一个可选的decmial点,后跟一个或两个数字。

例如,它应该完整匹配这些字符串:

  

3    
33    
0.3    
0.33    
33.3    
33.33

并且不匹配在decmial point之前或之后超过2位数的任何内容。

11 个答案:

答案 0 :(得分:58)

编辑:已更改为符合其他反馈。

我理解你的意思是,如果没有小数点,那么不应该有两个以上的数字。所以这应该是它:

\d{0,2}(\.\d{1,2})?

在大多数实现中应该这样做。如果没有,您可以使用:

[0-9]?[0-9]?(\.[0-9][0-9]?)?

这应该适用于我见过的每一个实现。

答案 1 :(得分:7)

(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])

匹配

  • 您的示例
  • 33

不匹配:

  • 333.33
  • 33.333

答案 2 :(得分:4)

要建立Lee的答案,你需要锚定表达式以满足小数点前不超过2个数字的要求。

如果每个数字都是单独的字符串,则可以使用string anchors

^\d{0,2}(\.\d{1,2})?$

如果每个数字都在字符串中,您可以使用word anchors

\b\d{0,2}(\.\d{1,2})?\b

答案 3 :(得分:3)

您提到您希望正则表达式匹配每个字符串,但您之前提到过小数点前的1-2位数?

这将匹配1-2个数字后跟一个可能的小数,然后是另外1-2个数字,但是你的例子为.33

\d{1,2}\.?\d{1,2}

这将匹配0-2位数后跟一个可能的deciaml,然后是另外1-2位数字并匹配.33的示例

\d{0,2}\.?\d{1,2}

不确定您正在寻找哪一个。

答案 4 :(得分:2)

您可以使用

让regex = new RegExp(       ^(?=[0-9.]{1,${maxlength}}$)[0-9]+(?:\.[0-9]{0,${decimal_number}})?$     );

您可以在其中确定最大长度以及要控制该值的小数点为止

使用ES6字符串插值法包装变量$ {maxlength}和$ {decimal_number}。

答案 5 :(得分:1)

^(\d{0,2}\\.)?\d{1,2}$

\d{1,2}$匹配1-2位数字后面没有任何内容(333等),(\d{0,2}\.)?可选匹配0-2位数字后跟一段时间(3.44..等)。把它们放在一起你就得到了你的正则表达式。

答案 6 :(得分:0)

^\d{0,2}\.?\d{1,2}$

答案 7 :(得分:0)

之前的答案大多是正确的,但它也会匹配空字符串。以下将解决这个问题。

^([0-9]?[0-9](\.[0-9][0-9]?)?)|([0-9]?[0-9]?(\.[0-9][0-9]?))$

答案 8 :(得分:0)

试试这个

\d{1,2}\.?(\.\d{1,2})?

答案 9 :(得分:0)

以下是两位数和两位小数的非常好的正则表达式。

[RegularExpression(@"\d{0,2}(\.\d{1,2})?", ErrorMessage = "{0} must be a Decimal Number.")]

答案 10 :(得分:-1)

  \d{1,}(\.\d{1,2})|\d{0,9}

https://regexr.com/

中测试

匹配带小数点后两位或仅一个小数的数字,或不带小数点后的数字。

您可以通过更改数字2来更改所需的数字或小数位