PHP Regular Expression (ตอนจบ) ฟังก์ชันของ PHP ที่ใช้กับ Regular Expression
จากหน้าที่ผ่านมาจะมีเฉพาะตัวอย่างของ regex อาจจะทำให้เกิดความงุนงงสักหน่อยนะครับ ในส่วนนี้เราจะพูดถึงฟังก์ชันของ PHP ที่นำเอา regex ไปใช้ซึ่งได้แก่
- ereg( ) -- regular expression match
- ereg_replace( ) -- replace regular expression
- eregi( ) -- case insensitive regular expression match
- eregi_replace( ) -- replace regular expression case insensitive
ฟังก์ชันของ PHP ที่ใช้กับ Regular Expression
จากหน้าที่ผ่านมาจะมีเฉพาะตัวอย่างของ regex อาจจะทำให้เกิดความงุนงงสักหน่อยนะครับ ในส่วนนี้เราจะพูดถึงฟังก์ชันของ PHP ที่นำเอา regex ไปใช้ซึ่งได้แก่
- ereg( ) -- regular expression match
- ereg_replace( ) -- replace regular expression
- eregi( ) -- case insensitive regular expression match
- eregi_replace( ) -- replace regular expression case insensitive
ereg( ) มี syntax คือ int ereg (string pattern, string string [, array regs]) ความหมายก็คือค้นหารูปแบบ (pattern) ที่กำหนดใน string ที่ให้มา ถ้าคนพบรูปแบบที่กำหนดก็จะคืนค่า True ถ้าไม่พบหรือเกิดความผิดพลาด ก็จะคืนค่า False ตัวอย่างง่ายๆ เช่น
<?php
$text = "Hello";
if (ereg("^[0-9]", $text)) {
echo "$text is valid.";
} else {
echo "$text is invalid.";
}
?>
จากตัวอย่างข้างต้น ฟังก์ชัน ereg จะคืนค่า false และจะพิมพ์ประโยค Hello is invalid. ออกมา
นอกจากนี้เรายังสามารถใช้ parenthesized substring ( ) มาช่วยในการดึงข้อความย่อย (substring) ค่าออกมาจาก $string หลังจากเจอรูปแบบที่ตรงกับที่กำหนด เช่น
<?php
$date = "08-04-2002";
if (ereg("([0-9]{2})-([0-9]{2})-([0-9]{4})", $date, $regs)) {
$date = $regs[1];
$month = $regs[2];
$year = $regs[3] + 543;
echo "$date $month $year";
} else {
echo "รูปแบบของวันที่ไม่ถูกต้องครับ!";
}
?>
จากตัวอย่างข้างบน จะได้ผลลัพธ์ คือ "08 04 2545" จะเห็นว่ามีตัวแปร $regs เพิ่มขึ้นมา (อาจจะตั้งเป็นชื่ออื่นๆ ได้) ตัวแปรนี้จะเป็นตัวแปร array ที่รับค่าต่างๆ จาก ( ) (parenthesized substring) โดยจะมีรูปแบบดังนี้
- $regs[0] จะมีค่าเท่ากับข้อความเดิมทั้งหมด ในตัวอย่างนี้ก็คือ "08-04-2002"
- $regs[1] จะมีค่าเท่ากับข้อความย่อยในวงเล็บเปิดที่อยู่อันแรกซ้ายมือสุด คือ "08"
- $regs[2] จะมีค่าเท่ากับข้อความย่อยในวงเล็บเปิดที่ถัดมาจากอันแรก คือ "04"
- $regs[3] จะมีค่าเท่ากับข้อความย่อยในวงเล็บเปิดที่ถัดมาจากอันที่สอง คือ "2002"
และถ้าหากมีวงเล็บอันที่สี่ซ้อน เพิ่มขึ้นมาอีกก็จะมีค่าเป็น $regs[4] เป็นเช่นนี้ต่อไปจนถึง $regs[9] ครับ รวมแล้วก็มีทั้งหมด 10 ตัวครับ
ตัวอย่างการดึงตัวเลข 4 ตัวที่ติดกันออกมาจากข้อความ
<?
$user_text = @$_POST["user_text"];
if (isset($user_text)) {
$user_text = htmlspecialchars(quotemeta($user_text));
echo "<b>ข้อความของคุณคือ</b>: $user_text<br>";
if (ereg("[0-9][0-9][0-9][0-9]", $user_text, $regs)) {
echo "<b>ตัวเลขติดกัน 4 ตัวแรกที่พบคือ</b>: $regs[0]<br>";
} else {
echo "ไม่พบตัวเลขติดกัน 4 ตัวตามรูปแบบที่กำหนด<br>";
}
}
?>
ตัวอย่างการตรวจสอบความถูกต้องของ email
<?
function check_email($input_email) {
if( eregi( "^" .
"[a-z0-9]+([_\\\\.-][a-z0-9]+)*" . //user
"@" .
"([a-z0-9]+([\\.-][a-z0-9]+)*)+" . //domain
"\\\\.[a-z]{2,}" . //sld, tld
"$", $input_email, $regs)
) { return TRUE; } else { return FALSE; }
}
if (isset($_POST["user_email"])) {
$user_email = $_POST["user_email"];
echo "<b>Email ที่คุณป้อนมาคือ</b>: $user_email<br>";
if (check_email($user_email)) {
echo "<b>Email ที่คุณป้อนมีรูปแบบถูกต้องแล้วครับ</b>";
} else {
echo "<b>Email ที่คุณป้อนมีรูปแบบไม่ถูกต้องครับ</b>";
}
}
?>