วันก่อนผมได้นำเสนอวิธี แปลงตัวหนังสือปนตัวเลขให้เป็นตัวเลข ไปแล้วครั้งหนึ่ง แต่ในบทความนั้นเหมาะกับตัวเลขที่ไม่มีจุดทศนิยม
วันนี้เรามาดูวิธีดึงตัวเลขออกจากข้อความกัน
ถ้าสมมติว่าผมมีข้อความชุดหนึ่ง คือ
“แตงโมราคา 120.50 บาท”
“แตงกวาราคา 15 บาท”
ผมต้องการทราบราคารวมของสินค้าทั้งสอง ต้องทำยังไง
วิธีการคือ ผมจะดึงเอาเฉพาะตัวเลขออกมาจากข้อความ ด้วยโค้ดนี้
$product1 = 'แตงโมราคา 120.50 บาท' ; $product2 = 'แตงกวาราคา 15 บาท' ; preg_match("/[[:digit:]]+\.?[[:digit:]]*/", $product1 , $price1 ) ; preg_match("/[[:digit:]]+\.?[[:digit:]]*/", $product2 , $price2 ) ; echo $price1[0]+$price2[0] ; |
ผมใช้คำสั่ง preg_match ดึงเอาเฉพาะตัวเลขออกมาจากข้อความ ไปเก็บไว้ในตัวแปร $price1 และ $price2 คำสั่ง preg_match นี้เวลามันเอาผลลัพธ์ไปเก็บในตัวแปร มันจะเก็บเป็น array ฉะนั้นตอนเอาราคาของแตงโมและแตงกวามาบวกกัน ผมจึงต้องใช้อย่างนี้ $price1[0]+$price2[0]
เคล็ดวิชาของโค้ดชุดนี้อยู่ที่ Regular Expression
[[:digit:]]+\.?[[:digit:]]* |
บอกไว้ก่อนว่า โค้ดชุดนี้ไม่ซัพพอร์ตตัวเลขที่มีเครื่องหมาย , คอมม่า ถ้าข้อความของท่านอาจจะมีเครื่องหมายนี้ ให้ท่านใช้ฟังก์ชั่น str_replace แทนที่เครื่องหมายคอมม่าด้วยค่าว่างเสียก่อน
อ่าน Regular Expression เพิ่มเติมได้ที่นี่ http://www.nextproject.net/contents/default.aspx?00103
EThaiZone says:
23/12/2553 at 23/12/2553
พอดีแวะผ่านมาเจอบทความนี้ ส่วนตัวแนะนำให้เปลี่ยน Delimiter ที่ใช้จะดีกว่านะครับ งานผมทำ Web Scraping ซะเยอะ ลองอ่าน http://www.thaiseoboard.com/index.php/topic,61676.msg756590msg756590
แล้วก็อันนี้เป็นแบบรองรับเครื่องหมายคอมม่า
([[:digit:]]+,)*[[:digit:]]+\.?[[:digit:]]*
administrator says:
23/12/2553 at 23/12/2553
ขอบคุณๆ EThaiZone มากครับ ผมงูๆปลาๆมากเลยเรื่อง Rexgular Expression เนี่ย กะๆอยู่ว่าจะพยายามเขียนเรื่องนี้ให้มาก เพราะไม่ค่อยมีคนอธิบายสักเท่าไร