首页 > 解决方案 > 如何将字符串转换为具有多个正负号的 int?

问题描述

我正在尝试将字符串转换为 int。一切正常,但这里有一个小问题

echo (int)"--12"; //return 0, i want 12
echo (int)"---23";//return 0, i want -23
echo (int)"+-99"; //return 0, i want -99
...

为什么会发生这种情况,在这种情况下正确的施法方式是什么?非常感谢!

标签: phpintegersigned

解决方案


要评估正号和负号以便忽略所有正号并且两个负号等于一个正号,您可以执行替换。

代码:(演示

$signed_number_strings = ["--1", "---33", "+-444"];

foreach ($signed_number_strings as $string) {
    var_dump((int)preg_replace('~\++|-\+*-\+*~', '', $string));
}

输出:

int(1)
int(-33)
int(-444)

该模式背后的逻辑是首先匹配/删除 1 个或多个连续+符号,或者一个-符号后跟零个或多个符号,+然后是 a -(并吸收任何尾随+符号)。如果有任何我的模式无法正确处理的边缘情况,请更新您的问题并给我留言。

ps 我的第二个分支的扩展\+*是尝试优化模式,使其不必重新启动模式。它本来可以写成~\++|-\+*-~这样对眼球的压力会稍微小一些。(演示


推荐阅读