ต้องแยกตัวเลขที่มีการบวก-ลบ-คูณ-หาร กับตัวอักษรออกจากกัน ใช้คำสั่ง preg_match ยังไงครับ
วานผู้รู้ช่วยตอบหน่อยครับ
Date :
2016-05-19 23:05:33
By :
rosjirun
โค้ดที่ผมเขียนครับ
<?php
$number = $_POST['val'];
if (preg_match("/^[0-9&(+|-|*|/)]+$/" , $number)){
if(strpos($number,"+")){
$Midtxt=explode('+',$number);
$num1=$Midtxt[0];
$num2=$Midtxt[1];
echo $number." = ".($num1+$num2);
}
if(strpos($number,"-")){
$Midtxt=explode('-',$number);
$num1=$Midtxt[0];
$num2=$Midtxt[1];
echo $number." = ".($num1-$num2);
}
if(strpos($number,"*")){
$Midtxt=explode('*',$number);
$num1=$Midtxt[0];
$num2=$Midtxt[1];
echo $number." = ".($num1*$num2);
}
if(strpos($number,"/")){
$Midtxt=explode('/',$number);
$num1=$Midtxt[0];
$num2=$Midtxt[1];
echo $number." = ".($num1/$num2);
}
}
else {
echo $number;
}
?>
ขึ้น error แบบนี้ครับ
Warning: preg_match(): Unknown modifier ')' in C:\xampp\htdocs\calculator\cal_check.php on line 4
4+6
วานผู้รู้ช่วยหน่อยครับ
Date :
2016-05-20 00:39:28
By :
rosjirun
ลองแบบนี้ดูครับ ไม่รู้จะตรงความต้องการไหม
Code (PHP)
$number = "1+2"; eval('$rs='.$number.';');
echo $number , '=', $rs;
หรือถ้าอยากแยก
Code (PHP)
$number='1+2';
if(preg_match_all( '/^(\d+)([\*\/\+\-])(\d+)$/', $number, $match)){
echo '<pre>',print_r($match, true),'</pre>';
switch( $match[2][0]){
case '*': $rs=($match[1][0]*$match[3][0]); break;
case '/': $rs=($match[1][0]/$match[3][0]); break;
case '+': $rs=($match[1][0]+$match[3][0]); break;
case '-': $rs=($match[1][0]-$match[3][0]); break;
}
}else $rs="not nuberic funciton";
echo $number,'=',$rs;
ประวัติการแก้ไข 2016-05-20 03:02:04
Date :
2016-05-20 02:58:52
By :
Chaidhanan
ได้แล้วครับ ขอบคุณมากๆเลยครับ ติดที่คำสั่ง if(preg_match_all( '/^(\d+)([\*\/\+\-])(\d+)$/', $number, $match)) อย่างเดียวเลยครับ
Date :
2016-05-20 09:05:22
By :
rosjirun
อธิบายตรงนี้หน่อยได้ไหมครับ ว่ามันทำงานยังไง
switch( $match[2][0]){
case '*': $rs=($match[1][0]*$match[3][0]); break;
case '/': $rs=($match[1][0]/$match[3][0]); break;
case '+': $rs=($match[1][0]+$match[3][0]); break;
case '-': $rs=($match[1][0]-$match[3][0]); break;
ตรงคำสั่ง switch....case...break อันนี้ผมเข้าใจการทำงานคับ
แต่ $match[1][0]*$match[3][0] อันนี้..ผมยังงงๆอยู่ครับ
Date :
2016-05-20 09:51:10
By :
rosjirun
$match เป็นค่าที่ คำสั่ง preg_match_all ส่งค่ากลับมาให้เรา ในรูปแบบ array
ว่า ค้นหาอะไรเจอบ้าง อ้างอิง จากวงเล็บที่เราสร้างครอบส่วนที่ต้องการให้มีการส่งค่ามา
print_r( $match) ดู ศึกษาว่ามันส่งอะไรมาครับ จะใ้หดี หา regular expression มาอ่านก็จะแจ่มครับ
ประวัติการแก้ไข 2016-05-20 20:03:42
Date :
2016-05-20 20:02:06
By :
NewbiePHP
Load balance : Server 02