正则表达式从格式中提取数字,例如 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))*$
我正在尝试使用正则表达式验证 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))*$