匹配带或不带小数点的数字

时间:2012-11-28 12:52:03

标签: regex

我一直试着找一个我需要的正则表达式。 之前有3个字符。和小数点后的两个字符。

我试试这个

[+ -]?[0-9]{0,3}[.]?[0-9]{0,2}    # but accepted as 55555 or the 
[+ -]?[0-9]{0,3}[.][0-9]{0,2}     # but this is not accepted as the 44 

有人能帮助我吗?

3 个答案:

答案 0 :(得分:3)

使用此:

^[+ -]?[0-9]{1,3}([.][0-9]{1,2})?$ 

See it live

我在开头和结尾添加了锚点。如果省略这些,则55555产生两个匹配:555和55。

答案 1 :(得分:3)

第一次尝试匹配

55555,因为您只选择了小数点,并且{2}在您的秒中不匹配,因为您只使小数点不可选。你想要做的是使小数位和以下数字都是可选的。

您还需要锚定匹配,否则4412345.12将匹配345

如果要验证字符串,请使用以下代码:12345.12345

说明:

^[-+]?[0-9]{1,3}(\.[0-9]{1,2})?$

尝试here!

进一步说明:

这只匹配符合模式的字符串,即^ # Match the start of string [-+]? # Optional plus or minus [0-9]{1,3} # Followed by 1 - 3 digits (\.[0-9]{1,2})? # Optionally followed by decimal place (escaped \) & 1-2 digits $ # Match the end of the string

如果您想匹配字符串中的模式,即123.34

而不是使用I am 123.34 cm tall(^|\s)作为锚点:

(\s|$)

哪一行与(^|\s)[-+]?[0-9]{1,3}(\.[0-9]{1,2})?(\s|$) ^的任何空格|匹配,与行\s的结尾相同。匹配将包含空格,因此请记住$以便在需要时删除它们。

答案 2 :(得分:0)

您可以尝试这样的事情: -

 ^?[0-9]{1,3}([.][0-9][0-9]?)?

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