5

我一直在尝试找到我需要的正则表达式。前 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 

有人能帮我吗?

4

3 回答 3

4

用这个:

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

现场观看

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

于 2012-11-28T12:55:58.000 回答
4

55555在您的第一次尝试中匹配,因为您仅将小数点设为可选,44而在第二次尝试中未匹配,因为您仅将小数点设为不可选。您要做的是使小数位和以下数字都是可选的。

您还需要以其他方式锚定匹配,123例如将匹配。45.1234512345.12345

如果要验证字符串,请使用:^[-+]?[0-9]{1,3}(\.[0-9]{1,2})?$

解释:

^                # 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)and(\s|$)作为锚点:

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

其中匹配^|首任何空格\s,与行尾相同$。匹配将包含空格,因此请记住在trim(match)需要时将其删除。

于 2012-11-28T13:02:49.900 回答
2

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

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

或者

 \d+(\.\d{1,2})?
于 2012-11-28T12:54:01.607 回答