几乎涵盖了PHP的基础知识,我决定挑战自己并制作一个简单的计算器。经过一番尝试,我发现了它,但我并不完全满足于此。我想让它更加用户友好,只需一个盒子就可以输入计算器,就像谷歌搜索一样。
所以只需键入:5 + 2 并收到7。
如何将字符串“5 + 2”拆分为三个变量,以便数学函数可以将数字转换为整数并识别运算符,以及考虑某些人在值之间使用空格的可能性?
你会爆炸吗?但是,如果没有空格,你会怎么爆炸呢? 我也偶然发现了preg_split函数,但我似乎无法解决这个问题,或者知道它是否适合解决这个问题。什么方法最适合这个?
答案 0 :(得分:2)
$calc = "5* 2+ 53";
$calc = preg_replace('/(\s*)/','',$calc);
print_r(preg_split('/([\x28-\x2B\x2D\x2F])/',$calc,-1,PREG_SPLIT_DELIM_CAPTURE));
这是我的出价,导致
Array
(
[0] => 5
[1] => *
[2] => 2
[3] => +
[4] => 53
)
答案 1 :(得分:1)
您可能需要使用一些聪明的正则表达式来分割它:
$ myOutput = split(“( - ?[0-9] +)|([+ - * /] {1})|( - ?[0-9] +)”);
我没有测试过 - 只是一个半假的例子抱歉: - >只是想突出显示你需要记住你的 - (减号)运算符可以出现在一个整数的开头,使其成为负数,这样你最终可能会遇到-1-21的问题,这些问题是有效的但是使你的正则表达式规则更复杂。
答案 2 :(得分:0)
答案 3 :(得分:0)
你对preg_split有了正确的想法。它可以这样工作:
$values = preg_split("/[\s]+/", "76 + 23");
结果数组将包含非空格的值:
值应如下所示: $ values [0]:“76” $ values [1]:“+” $ values [2]:“23”
“/ [\ s] + /”是一个正则表达式模式,可以匹配任何空白字符一次或多次。但是,如果根本没有空格,preg_split将只返回原始的“5 + 2”作为数组第一个元素中的单个字符串。即:
$values[0] = "5+2"