php - 如何将字符串转换为具有多个正负号的 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
...
为什么会发生这种情况,在这种情况下正确的施法方式是什么?非常感谢!
解决方案
要评估正号和负号以便忽略所有正号并且两个负号等于一个正号,您可以执行替换。
代码:(演示)
$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 我的第二个分支的扩展\+*
是尝试优化模式,使其不必重新启动模式。它本来可以写成~\++|-\+*-~
这样对眼球的压力会稍微小一些。(演示)
推荐阅读
- javascript - 用于替换两个单词之间的所有内容和新行的正则表达式
- javascript - NodeJS:使用分页读取 csv 文件(即,如果它有 1000 个文件,我将得到 0-99,在调用 next() 时,我将得到 100-199,依此类推)
- android - ViewStub 父级变为空
- python - Python for 和 Tensorflow tf.while_loop 有什么区别?
- html - 如何在 bulma 列中设置全高背景颜色?
- angular - Angular 没有检测到 swiper 幻灯片的变化
- reactjs - React 道具返回未定义
- android - ARCore Android – 本地位置与世界位置
- python - 使用同一类中的不同函数时如何在 Python 中获取 Checkbox 的值
- amazon-s3 - 如何根据数据湖中的数据的不同参数进行多个分区