我的目标是为十进制数写一个正则表达式,其中有效数字是其中之一 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:我意识到我的错误,我对'?'感到困惑。谢谢。
答案 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,无论如何)的数值。