正则表达式从格式中提取数字,例如 1+2+2.5 以及一些附加规则

Regex to pull out numbers from format such as 1+2+2.5 with some additional rules

我正在尝试使用正则表达式验证 3.5+1+2+2.5 格式的数字,规则如下:

1)每个数都是0.5

的倍数

2)每个数字至少是1

3)只需要一个号码

例如:

`2.5+1`     Validates
`1+2+2.5`   Validates
`1`         Validates
`1.6`       INCORRECT
`1+2+`      INCORRECT
`1+2+2.5+6` Validates

我想这可能吗?但我正在为这个错误的模式而苦苦挣扎:

$value = '3.5+1+2+2.5';
if (preg_match('/^(\d(\.5)?)(\+\d(\.5)?)*/', $value)) {
    echo array_sum(explode('+', $value));
}

但上面的模式似乎验证了一切。

试试这个:

^[1-9]+(\.5)?(\+[1-9]+(\.5)?)*$

您的正则表达式需要一些小的修改:

  • 字符串锚点结束$
  • \d 替换为 [1-9]

使用子例程,更短的正则表达式将是:

^([1-9]+(\.5)?)(\+(?1))*$

live demo here