4

我的目标是为十进制数编写一个正则表达式,其中有效数字是 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:我意识到我的错误我对“?”感到困惑。谢谢你。

4

5 回答 5

3

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

^\d{0,2}\.(00?|(1|6)?25|(3|8)?75|50?)$
于 2013-04-16T23:30:44.190 回答
3

我会\d*在文字.检查后添加另一个\.

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

于 2013-04-16T23:31:04.393 回答
1

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

关于?(问号)运算符:使前面的项目可选。贪心,所以如果可能的话,可选项目包含在匹配中。来源

于 2013-04-16T23:28:36.833 回答
1
^\d{0,2}\.(0|(1|2|6)?25|(3|6|8)?75|5)$
于 2013-04-16T23:40:53.210 回答
0

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

于 2013-04-16T23:34:44.500 回答