正则表达式匹配等于或大于0.5或0.5,增量为.5

时间:2015-11-12 17:41:25

标签: regex

我正在尝试在另一篇文章中增强给定答案:

^[1-9]\d*(?:\.[05])?$

解体:

^        # Start of input
[1-9]    # match digit 1 to 9
\d*      # match 0 or more of any digits
(?:      # start of non-capturing group
\.       # match a decimal
[05]     # followed by digit 0 or 5
)?       # end non-capturing group. (? makes this group optional)
$        # End of input

只有这次正则表达式需要接受0,5或0.5并且增量为0.5或0.5

零号是唯一无法匹配的号码。

已经尝试过:

(?!0).{1}|^[1-9]\d*(?:(,|\.)[05])?$

[^0]|^[1-9]\d*(?:(,|\.)[05])?$

你能帮帮忙吗?

3 个答案:

答案 0 :(得分:1)

您可以使用

^(?!0$)\d+(?:[,.][05])?$

请参阅demo

这将符合您要求的数字,并且由于开头的预测而排除0 - 仅限数字。

主要变化:

  • \d+ - 替换[1-9]\d*以允许0作为整数部分
  • [,.] - 替换\.以允许逗号作为小数分隔符。
  • 前瞻会增加0 - 数字例外。

可以增强前瞻以禁止0.000 - 如输入:

^(?!0+(?:[,.]0+)?$)\d+(?:[,.][05])?$

请参阅another demo

答案 1 :(得分:0)

您可以使用此正则表达式:

^(?:5|[1-9]\d*[05])(?:[,.][05])?$

RegEx Demo

答案 2 :(得分:0)

这应该这样做:

^(?!0*$)0?\d*([,.]5)?$

请参阅live demo

这使用^\d*([,.]5)?$来匹配您想要的内容,并使用^(?!0*([,.]0*)?$)在所有形式中排除零,即它赢得了匹配0,000等