正则表达式为0.25区间

时间:2013-04-16 23:26:13

标签: regex

我的目标是为十进制数写一个正则表达式,其中有效数字是其中之一 xx.0,xx.125,xx.25,xx.375,xx.5,xx.625,xx.75,xx.875(即以1/8为单位测量)xx可以是0,1或2位数。

我想出了以下正则表达式:

^\d*\.?((25)|(50)|(5)|(75)|(0)|(00))?$

虽然这适用于0.25,0.5,0.75,但它不适用于0.225,0.675等。

我假设'?'在有前面的数字的情况下也能工作。

有人可以指出我的错误

编辑:要求数字为小数!

Edit2:我意识到我的错误,我对'?'感到困惑。谢谢。

5 个答案:

答案 0 :(得分:3)

我认为将小数部分乘以8可能更容易,但是你不会考虑在正则表达式中引导最后两位小数的数字。

^\d{0,2}\.(00?|(1|6)?25|(3|8)?75|50?)$

答案 1 :(得分:3)

我会在文字\d*检查.

之后添加另一个\.

^\d*\.?\d*((25)|(50)|(5)|(75)|(0)|(00))?$

答案 2 :(得分:1)

您的错误是:\.?表示一个可选\.,而不是数字(或其他任何内容,在这种情况下)。

关于?(问号)运算符:使前一项可选。贪心,所以如果可能的话,可选项包含在比赛中。 source)功能

答案 3 :(得分:1)

^\d{0,2}\.(0|(1|2|6)?25|(3|6|8)?75|5)$

答案 4 :(得分:0)

正则表达式用于匹配模式,而不是检查数值。找到一个可能的正则表达式字符串,然后检查它的主机语言(PHP,无论如何)的数值。