PHP เบื้องต้น > การควบคุมข้อความและนิพจน์ปกติี่
การทำงานกับข้อความด้วยนิพจน์ปกติิ
ฟังก์ชันของนิพจน์ปกติสามารถทำงานได้เหมือนกับรูปแบบฟังก์ชันข้อความแต่ในหลายกรณีทำงานได้มีประสิทธิภาพมากกว่า
การค้นหาข้อความย่อย
การค้นหาข้อความย่อยคือ การประยุกต์หลักของนิพจน์ที่เพิ่มพัฒนา 2 ฟังก์ชันใน PHP สำหรับนิพจน์ปกติจับคู่ คือ ereg () และ eregi ()
ฟังก์ชัน ereg () มีไวยากรณ์ดังนี้
int ereg ( string pattern, string search, array [match]);
ฟังก์ชันนี้ค้นหาข้อความ search ด้วยมองหาการจับคู่กับนิพจน์ปกติใน pattern ถ้าพบตามนิพจน์ย่อยของ pattern จะเก็บใน array match โดย 1 นิพจน์ย่อยต่อ 1 หน่วยขอมูลของ array
ฟังก์ชัน eregi () เหมือนกับฟังก์ชัน ereg () ยกเว้นตัวพิมพ์ไม่มีผล
ตัวอย่างการตรวจสอบอีเมล์
<?php
$email = array();
$email = array("master@yahoo.com", "none9945@mm");
$mail_pattern = "[[:alnum:]._-]+@[[:alnum:]-]+\.)*[[:alnum:]]+";
foreach ($email as $mail)
{
if (eregi($mail_pattern, $mail))
echo "$mail -> รูปแบบถูกต้อง<br/>\n";
else
echo "$mail -> ไม่ถูกต้อง<br/>\n";
}
?>
ผลลัพธ์
master@yahoo.com -> รูปแบบถูกต้อง
none9945@mm -> ไม่ถูกต้อง
การแทนที่ข้อความย่อย
นิพจน์ปกติสามารถใช้ค้นหาและแทนที่ข้อความย่อยในวิธีเดียวกับการใช้ str_replace() 2 ฟังก์ชันนี้มีให้สำเร็จฟังก์ชัน ereg_replace () และ eregi_replace () ฟังก์ชัน ereg_replace () มีไวยากรณ์ดังนี้
string ereg_replace (string pattern, string replacement, string search);
ฟังก์ชันนี้ค้นหานิพจน์ปกติ pattern ในข้อความ search และแทนที่ด้วยข้อความ replacement
ฟังก์ชัน eregi_replace () เหมือนกับฟังก์ชัน ereg_replace () แต่ตัวพิมพ์ไม่มีผล
<?php
$mystring ="เนื่องจากค่าน้ำมันแพงขึ้นทำให้ค่าขนส่งเพิ่มขึ้น ฿245,145.27 ต่อเดือน";
$pattern = "\฿[0-9]+(\,[0-9]{1,3})+(\.[0-9]{1,2})?";
$replaceby = "(จำนวนมาก)";
echo ereg_replace($pattern, $replaceby, $mystring);
?>
ผลลัพธ์
เนื่องจากค่าน้ำมันแพงขึ้นทำให้ค่าเชื้อเพลิงขนส่งเพิ่มขึ้น (จำนวนมาก) ต่อเดือน
การแบ่งข้อความ
นิพจน์ปกติมีอีกฟังก์ชันที่เป็นประโยชน์ คือ split () และมีไวยากรณ์ ดังนี้
array split (string pattern, string search, int [max]);
ฟังก์ชันนี้แบ่งข้อความ search เป็นข้อความย่อยบนนิพจน์ปกติ pattern และส่งออกข้อความย่อยใน array เลขจำนวนเต็ม max จำกัดจำนวนรายการที่สามารถเข้าไปใน array นี้
ฟังก์ชันนี้สามารถใช้แบ่งชื่อโดเมน หรือวันที่ ตัวอย่าง การแบ่งชื่อโดเมน
<?php
$domain = "service.th.widebase.net";
$ary = split("\.", $domain);
while (list($key,$value) = each ($ary))
echo $value."<br/>\n";
?>
คำสั่งนี้แบ่งชื่อโฮสต์เป็น 4 ส่วน และพิมพ์แยกคนละบรรทัด
|