วันพฤหัสบดีที่ 27 พฤศจิกายน พ.ศ. 2557

การควบคุมข้อความ และนิพจน์ปกติ

        การประยุกต์กับข้อความของ PHP สำหรับการจัดรูปแบบและควบคุมข้อความ จะกล่าวถึงการใช้ฟังก์ชันข้อความ หรือฟังก์ชันนิพจน์ปกติ (regular expression) เพื่อค้นหาคำ วลี หรือรูปแบบอื่นภายในข้อความ

       ฟังก์ชันเหล่านี้มีประโยชน์ในหลายบริบท เช่น การจัดรูปแบบนำเข้าแล้วจัดเก็บในฐานข้อมูล ฟังก์ชันค้นหามีประโยชน์มากเมื่อสร้างโปรแกรม

ชุดตัวอักษรและ Unicode
    ตามปกติ PHP นำเสนอข้อความเป็นตัวอักษร 8 บิตตาม ISO-8859-1 ซึ่งสามารถแสดงได้ 256 ตัวอักษร ดังนั้นจึงไม่สามารถแสดงพยัญชนะที่ต้องการมากกว่านี้ได้ เช่น จีนหรือญี่ปุ่นได้
PHP มีส่วนขยาย mbstring ช่วยแก้ไขปัญหานี้ ก่อนอื่นควรเรียนรู้เกี่ยวกับ "ชุดตัวอักษร" (Character Set หรือ charset) และการทำงานของคอมพิวเตอร์กับพยัญชนะต่างๆ

 ASCII
การพัฒนาคอมพิวเตอร์ในตอนต้นได้สร้างการจับคู่ระหว่างรหัสดิจิตอลกับตัวอักษรพิมพ์ได้ แต่ไม่ค่อยเหมาะสมกับธรรมชาติระบบไบนารีของคอมพิวเตอร์ ในปี 1963 American Standard Association ได้ประกาศมาตรฐาน American Standard Code for Information Interchange หรือ ASCII โดยเป็นตัวอักษร 7 บิตที่ครอบคลุมตัวอักษรลาตินที่ใช้เป็นพยัญชนะภาษาอังกฤษ ตัวเลข เครื่องหมาย และสัญลักษณ์ทางการเงิน
ระบบนี้ไม่สามารถรองรับภาษาในยุโรปตะวันตก เช่น ฝรั่งเศส สเปน รวมถึงภาษา ไซริลลิค อาร์เมเนียและฮิบรู

 ชุดตัวอักษร ISO 8859
คอมพิวเตอร์ปัจจุบันสามารถเก็บข้อมูลเป็นตัวอักษร 8 บิตและ ASCII 7 บิตด้วยการบิตสูง (high bit) เป็น parity bit (สำหรับการตรวจสอบการรวมข้อมูล)
         ชุดตัวอักษรของอนุกรม ISO 8859 หรือเรียกว่า code page เริ่มจาก ISO 8859-1 กำหนด "พยัญชนะลาตินหมายเลข 1" หรือ Latin-1 เป็นชุดตัวอักษรครอบคลุมภาษายุโรปตะวันตกหลักได้ จนถึงปี 1999 มีอนุกรม 15 ชุด ภาษาไทยอยู่ในอนุกรม 11 ในอนุกรม 15 ปี 1999 ได้เพิ่มสัญลักษณ์เงินยูโร ( € ) อนุกรมอื่นๆได้ครอบคลุมภาษา สล๊าฟ และไซริลลิค เช่น รัสเซีย ฮิบรู และตรุก
         ชุดตัวอักษรยังสอดคล้องกับ ASCII อย่างเต็มที่และใช้ 127 อักษรล่างร่วมกัน ในระบบปฏิบัติการ Microsoft Windows ได้ปรับปรุง code page เล็กน้อยเป็น windows-1252 หรือ cp-1252 สำหรับภาษาอังกฤษ (1251 สำหรับภาษารัสเซีย เป็นต้น) ภาษาไทยสามารถใช้ได้กับชุดตัวอักษร charset=windows-874 นอกจากนี้ ภาษาไทยยังสามารถใช้กับ charset=tis-620

ภาษาตะวันออกไกล
   ภาษาตะวันออกไกลกลุ่มนี้คือ จีน ญี่ปุ่น และเกาหลี ใช้ตัวอักษรจำนวนมาก การพัฒนาเริ่มต้นในญี่ปุ่นกับตัวอักษรคาตาคะนะ และเพิ่มตัวอักษรคานจิ (อักษรจีน) ในภายหลัง Microsoft พัฒนา "Shift-JIS" หรือรู้จักในชื่อ DBCS (Double-Byte Character Set)
       ในปัจจุบันมีมาตรฐาน GB 2312-80 สำหรับตัวอักษรจีนอย่างง่าย Big-5 สำหรับตัวอักษรจีนดั้งเดิม และ UHC (Unified Hangul Code) สำหรับภาษาเกาหลี

 Unicode
Unicode (มาจาก Universal Code) ได้รับการพัฒนาตั้งแต่ทศวรรษ 1980 เพื่อให้ครอบคลุมทุกภาษา ต่อมาได้กลายเป็น ISO 10464
มาตรฐานเริ่มแรกเป็นตัวอักษร 16 บิตที่สอดคล้องกับตัวอักษร ASCII ใน 127 สล๊อตแรก นอกจากจะสนับสนุนพยัญชนะลาตินแล้ว ยังสนับสนุนภาษาอื่น เช่น อาเมเนีย กรีซ ไทย จีน ญี่ปุ่น และเกาหลีด้วย
      ตัวอักษร 16 บิตนี้ยังไม่สามารถรองรับตัวอักษรในภาษาจีน ญี่ปุ่น และเกาหลี ที่มีมากกว่า 70,000 ตัวอักษรได้ จึงมีการพัฒนาเป็นระบบ 32 บิตทำให้สามารถรองภาษาปัจจุบันและภาษาที่ตายแล้วได้ ระบบนี้ไม่เพียงรองรับมาตรฐาน 16 บิตและ 32 บิตแล้ว ยังรองรับตัวอักษรบิตเดียวด้วย
การเข้ารหัส unicode ที่ใช้กันมากคือ
1. UTF-7 เป็นการเข้ารหัส 7 บิตสำหรับการรองรับ ASCII 7 บิตและใช้อีก 1 หรือ 2 สล๊อตเพื่อระบุไบต์ขยายสำหรับตัวอักษรอื่น
2. UTF-8 เป็นการเข้ารหัส ASCII เต็มใน 127 สล๊อตแรกและใช้ schema เข้ารหัสส่วนที่เหลือ
3. UTF-16 เป็นการเข้ารหัสคำ 16 บิต ภาษาหลักยังคงอยู่ใน 16 บิตแรก
4. UTF-32 เป็นการเข้ารหัสคำ 2 เท่า (double word หรือ DWORD) 32 บิต นอกจากนี้ยังสนับสนุน หลายตัวอักษร DWORD สำหรับตัวอักษรเพิ่มเติมในอนาคต

การประกาศ
การบอกให้ลูกข่ายทราบถึงการแสดงผลปัจจุบันบน HTML ให้ประกาศคำสั่งที่ส่วนหัว
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
ส่วน charset ที่กำหนดมีผลให้ browser จะรับทราบและแสดงผลตามที่ระบุ

การคอนฟิก PHP สำหรับ Unicode
การคอนฟิก PHP ให้ทำงานกับข้อความและนิพจน์ปกติหลายไบต์ ให้ตรวจสอบการระบุคำสั่ง
--enable-mbstring
--enable-mbregex
     ใน Windows ให้แก้ไขไฟล์ php.ini ที่เก็บในไดเรคทอรีรากของ Windows (ปกติคือ C:\Windows) หรือไดเรคทอรีที่ติดตั้ง PHP ตรวจว่าได้ยกเลิก comment คือลบเครื่องหมาย semicolon (;) หน้าคำสั่งextension=php_mbstring.dll
    รวมทั้งต้องตรวจสอบว่าได้เก็บ dynamic link library (DLL) ส่วนขยาย mbstring หรือ php_mbstring.dll ในไดเรคทอรีที่เหมาะสม โดย PHP จะค้นหาส่วนขยายตามการตั้งค่าตัวเลือกคอนฟิก extension_dir ในไฟล์ php.ini
extension_dir="c:\php\ext"หรือ extension_dir = "C:\AppServ\php5\ext"

การจัดรูปแบบข้อความ
ตามปกติต้องมีการปรับข้อความของผู้ใช้เล็กน้อย (จาก ฟอร์ม HTML) ก่อนการใช้

การตัดข้อความ
ขั้นตอนแรกในการปรับคือการตัด whitespace ส่วนเกินจากข้อความ ถึงแม้ว่าสิ่งนี้ไม่สำคัญแต่มีประโยชน์ถ้ากำลังเก็บข้อมูลในไฟล์หรือฐานข้อมูล หรือเปรียบเทียบข้อความ
PHP มี 3 ฟังก์ชันสำหรับวัตถุประสงค์นี้ ฟังก์ชัน trim () ใช้ปรับปรุงข้อมูลนำเข้าดังนี้
$name = trim($name);
ฟังก์ชัน trim () ตัด whitespace จากเริ่มต้นและท้ายข้อความ จากนั้นส่งออกข้อความผลลัพธ์ ตัวอักษรที่ถูกตัดคือ บรรทัดใหม่ (\n) และช่องว่าง
ฟังก์ชัน ltrim () กำจัด whitespace เฉพาะจากเริ่มต้นข้อความ ฟังก์ชัน chop() กำจัด whitespace จากท้ายข้อความ

การจัดรูปแบบข้อความสำหรับการนำเสนอ
PHP มีชุดฟังก์ชันที่สามารถจัดรูปแบบข้อความในวิธีต่างกัน

การใช้รูปแบบ HTML
ฟังก์ชัน nl2br () ใช้ข้อความเป็นพารามิเตอร์และแทนที่ตัวอักษรบรรทัดใหม่ด้วย <br/> ฟังก์ชันนี้ใช้ประโยชน์สำหรับการส่งข้อความไปยัง browser ให้เป็นรูปแบบ HTML เนื่องจาก HTML จะไม่สนใจ whitespace ทำให้ข้อความเหล่านี้ไม่มีการเว้นบรรทัด

จัดรูปแบบข้อความสำหรับการพิมพ์
นอกจากการใช้ echo ในการพิมพ์ข้อความไปยัง browser แล้ว PHP ยังสนับสนุนฟังก์ชัน print () ซึ่งทำงานเหมือนกับ echo แต่เป็นฟังก์ชันที่ส่งออกค่า (0 หรือ 1)ในการจัดรูปแบบซับซ้อนสามารถใช้ 2 เทคนิคคือ ฟังก์ชัน printf () และ sprintf () ฟังก์ชันนี้ทำงานลักษณะเดียวกัน ยกเว้น printf () พิมพ์ข้อความจัดรูปแบบไปยัง browser และ sprintf () ส่งออกข้อความจัดรูปแบบ
ไวยากรณ์ของฟังก์ชัน คือ
string    sprintf (string format [,mixed args...])
int         printf (string format [,mixed args...])
พารามิเตอร์แรกที่ส่งผ่านทั้ง 2 ฟังก์ชัน คือข้อความจัดรูปแบบที่อธิบายลักษณะพื้นฐานของผลลัพธ์ด้วยรหัสรูปแบบแทนที่ตัวแปร พารามิเตอร์อื่นเป็นตัวแปรที่จะแทนที่ในข้อความจัดรูปแบบ
ตัวอย่าง การใช้ echo พิมพ์ตัวแปรที่ต้องการ
echo "จำนวนรวมของใบสั่งซื้อคือ $amount";
printf () ใช้ดังนี้
printf ("จำนวนรวมของใบสั่งซื้อคือ %s", $amount);
%s ในข้อความจัดรูปแบบคือการเรียกข้อกำหนดการแปลง รหัสหมายถึง "แทนที่ด้วยข้อความ" ในกรณีนี้ถูกแทนที่ด้วย $amount ที่แปลเป็นข้อความ
ถ้าค่าเก็บใน $total คือ 12.4 ทั้ง 2 คำสั่งจะพิมพ์เป็น 12.4
ข้อได้เปรียบของ printf () คือ สามารถใช้ข้อกำหนดการแปลงอื่น เพื่อระบุ $amount คือ เลขทศนิยม และควรมีทศนิยม 2 ตำแหน่ง หลังจุดทศนิยม
printf ("จำนวนรวมของใบสั่งซื้อคือ %.2f ",$amount);
ในข้อความจัดรูปแบบมีได้หลายข้อกำหนดการแปลง ถ้ามี n ข้อกำหนดการแปลง ควรมี n อากิวเมนต์หลังจากข้อความรูปแบบ แต่ละข้อกำหนดการแปลงได้รับการแทนที่ โดยอากิวเมนต์จัดรูปแบบตามลำดับในรายการ
printf ("จำนวนรวมของใบสั่งซื้อคือ %.2f (ค่าจัดส่ง %.2f ) ", $freight);
ข้อกำหนดการแปลงแรกใช้ตัวแปร $amount และที่ 2 ใช้ตัวแปร $freight
%[‘padding_chaeacter‘] [-] [width] [.precision]type
แต่ละข้อกำหนดการแปลงมีรูปแบบเหมือนกันคือ
padding_chaeacter เป็นตัวเลือกใช้รองรับตัวแปรกับความกว้างที่ระบุ ตามตัวอย่างใช้เพิ่มศูนย์นำหน้าตัวเลข เหมือนตัวนับ
สัญลักษณ์ เป็นตัวเลือกระบุว่าข้อมูลในฟิลด์ชิดซ้ายแทนที่ชิดของตามค่าเริ่มต้น
width บอก printf () รู้ถึงที่ว่าง ( เป็นตัวอักษร) ให้เหลือไว้กับตัวแปรที่ถูกแทนที่
precision ต้องเริ่มต้นด้วยจุดทศนิยม และเก็บตัวเลขตำแหน่งหลังจุดทศนิยมที่ต้องการแสดง
type คือ รหัสประเภท ตามการสรุปในตาราง 1.5.1
ตาราง 1.5.1 รหัสประเภทข้อกำหนดการแปลง
ประเภท
ความหมาย
b
แปลเป็นจำนวนเต็ม และพิมพ์เป็นเลขฐาน 2
c
แปลเป็นจำนวนเต็ม และพิมพ์เป็นตัวอักษร
d
แปลเป็นจำนวนเต็ม และพิมพ์เป็นเลขฐาน 10
f
แปลเป็น double และพิมพ์เป็นจุดทศนิยม
o
แปลเป็นจำนวนเต็ม และพิมพ์เป็นเลขฐาน 8
s
แปลเป็นข้อความและพิมพ์เป็นข้อความ
x
แปลเป็นจำนวนเต็ม และพิมพ์เป็นเลขฐาน 16 ด้วยตัวพิมพ์เล็ก สำหรับเลข a-f
X
แปลเป็นจำนวนเต็ม และพิมพ์เป็นเลขฐาน 16 ด้วยตัวพิมพ์ใหญ่ สำหรับเลข A-F

การเปลี่ยนตัวพิมพ์ของข้อความ
ตัวพิมพ์ของข้อความสามารถจัดรูปแบบใหม่ด้วยฟังก์ชันเปลี่ยนตัวพิมพ์ ผลของฟังก์ชันเหล่านี้สรุปอยู่ในตาราง 1.5.2
ตาราง 1.5.2 ฟังก์ชันตัวพิมพ์และผลลัพธ์
ฟังก์ชัน
คำอธิบาย
การใช้
$subject
ผลลัพธ์
Feedback from wed site
strtoupper (mb_strtoupper)
เปลี่ยนข้อความเป็นตัวพิมพ์ใหญ่
strtoupper($subject)
HELLO WORLD AND EVERYBODY
strtolower (mb_strtolower)
เปลี่ยนข้อความเป็นตัวพิมพ์เล็ก
strtolower ($subject)
hello world and everybody
ucfirst ()
เปลี่ยนตัวอักษรแรกของข้อความเป็นตัวพิมพ์ใหญ่
ucfirst ($subject)
Hello world and everybody

 การจัดรูปแบบสำหรับการจัดเก็บในฐานข้อมูล
ฟังก์ชันข้อความ adddslashes () และ stripslashes () สามารถใช้จัดรูปแบบข้อความใหม่สำหรับการจัดเก็บในฐานข้อมูล  ตัวอักษรบางประเภท เช่น เครื่องหมายคำพูด ( ' และ " ), backslash (\) และตัวอักษร NULL มีปัญหากับการแปลความหมายของฐานข้อมูลเพื่อการจัดเก็บเข้าสู่ฐานข้อมูล ดังนั้นจึงจำเป็นต้องหาวิธีการระบุ หรือ escape ตัวอักษรเหล่านี้เพื่อให้ฐานข้อมูล เช่น MySql สามารถเข้าใจความหมายตัวอักษรพิเศษ แล้วทำ escape ตัวอักษรเหล่านี้โดยให้เพิ่ม backslash ข้างหน้า เช่น "(double quote) จะเป็น \" และ \ (backslash) จะเป็น \\ (กฎที่ประยุกต์แบบทั่วไปกับอักษรพิเศษ ถ้ามี \\ ในข้อความต้องแทนที่ด้วย \\\\)
PHP มี 2 วิธีฟังก์ชันพิเศษที่ออกแบบสำหรับการออกแบบตัวอักษร ก่อนการเขียนข้อความเข้าสู่ฐานข้อมูล ควรจัดรูปแบบด้วย addslashes ()
$stringvar = addslashes ($stringvar);
addslashes นำข้อความเป็นพารามิเตอร์และส่งออกข้อความจัดรูปแบบใหม่
    เมื่อใช้ addslashes () แล้ว ข้อความได้รับการเก็บในฐานข้อมูลด้วย slash ในข้อความนั้น เมื่อดึงข้อความออกมาต้องตัด slash ออกด้วยฟังก์ชัน stripslashes ()
$stringvar = stripslashes ($stringvar);

การทำงานกับข้อความ
PHP มีหลายฟังก์ชันในการควบคุมและประมวลผลข้อความ รวมทั้งมีหลายฟังก์ชันได้รับการ overload เมื่อเปิดโมดูล mbstring สำหรับ multi-byte

การดึงสารสนเทศ
PHP มีฟังก์ชันจำนวนหนึ่งในการดึงสารสนเทศของข้อความ ได้แก่ ความยาวและตำแหน่งภายในชุดตัวอักษร

ฟังก์ชัน strlen (mb_strlen)
ฟังก์ชัน strlen () สามารถตรวจสอบความยาวของข้อความด้วยการนับตัวอักษร
strlen("กุหลาบ สายประดิษฐ์ เจ้าของนามปากกา ศรีบูรพา");
ข้อความนี้นับได้ 43 ตัวอักษร
mb_strlen() มีตัวเลือกการเข้ารหัสมีไวยากรณ์คือ
int mb_strlen(string input, string encode);
encode คือ การเข้ารหัส เช่น UTF-8

ฟังก์ชัน mb_detect_encoding
ฟังก์ชัน mb_detect_encoding() ใช้วิเคราะห์การเข้ารหัสข้อความ และเป็นประโยชน์มากเมื่อทำงานกับภาษาญี่ปุ่น หรือรัสเซีย
<?php
$mystring = "Hello world";
echo mb_detect_encoding($mystring);
?>
ผลลัพธ์ คือ ASCII

การเชื่อมและแบ่งข้อความด้วยฟังก์ชันข้อความ
บ่อยครั้งที่มีความต้องการดูบ่างส่วนของข้อความ ตัวอย่างเช่น อาจจะมองหาคำในประโยค (เช่น ตรวจการสะกด) หรือ แบ่งชื่อโดเมนหรือชื่ออีเมล์เป็นส่วนประกอบ ในการทำงานนี้ PHP มีหลายฟังชันข้อความ (และ 1 ฟังก์ชันนิพจน์ปกติ)
ตัวอย่าง การแจ้งกลับจาก mycustomer.com ให้ส่งข่าวสารตรงไปยังผู้บริหาร ดังนั้นต้องแบ่งชื่ออีเมล์ออกเป็นส่วนเพื่อค้นหาว่าเป็นลูกค้าตามที่ระบุหรือไม่

ฟังก์ชัน explode, implode และ join
ฟังก์ชันแรกสามารถใช้กับวัตถุประสงค์นี้ explode () มีไวยากรณ์ดังนี้
array explode (string separator, string input);
ฟังก์ชันนี้นำข้อความ input และแบ่งเป็นชิ้นส่วนตามการระบุด้วย separator ชิ้นส่วนได้รับการส่งใน array
การดึงชื่อโดเมนจากชื่ออีเมล์ในสคริปต์นี้ สามารถใช้คำสั่งต่อไปนี้
$email_array = explode ("@", $email);
คำสั่งนี้เรียก explode [1] ขณะนี้สามารถทดสอบชื่อโดเมนเพื่อหาที่มาของลูกค้า จากนั้นส่งข่าวสารให้กับบุคคลที่เหมาะสม
<?php
$email = array();
$email = array("wandee@mycustomer.com", "chaiwat@widebase.net");
foreach ($email as $msg)
{
$email_array = explode("@", $msg);
if ($email_array[1] == "mycustomer.com")
 echo "$msg แจ้งให้ฝ่ายบริหารทราบ<br/>\n";
else
  echo "$msg ลูกค้าปกติ<br/>\n";
}
?>
หมายเหตุ    ถ้าโดเมนเป็นตัวพิมพ์ใหญ่จะทำงานไม่ได้ การหลีกเลี่ยงปัญหานี้ให้แปลงชื่อโดเมนเป็นตัวพิมพ์ใหญ่ หรือตัวพิมพ์เล็กทั้งหมด จากนั้นจึงตรวจสอบ
$email_array[1] = strtoupper($email_array [1]);
การย้อนกลับผลของ explode () ใช้ได้ทั้ง implode () หรือ join() ซึ่งเหมือนกับตัวอย่าง
$new_email = implode ("@", $email_array)
คำสั่งนี้นำหน่วยข้อมูลของ array จาก $email_array และเชื่อมเข้าด้วยกันด้วยข้อความส่งผ่านในพารามิเตอร์แรก การเรียกคล้ายกับ explode () แต่มีผลต่างกัน

ฟังก์ชัน substr
ฟังก์ชัน substr () ยอมให้เข้าถึงข้อความย่อยระหว่างจุดเริ่มต้นและสิ้นสุดของข้อความ ฟังก์ชันนี้สามารถใช้ประโยชน์เมื่อต้องการบางส่วนของข้อความตายตัว
ฟังก์ชัน substr () มีไวยากรณ์ต่อไปนี้
string substr (string string, int start, int [length]);
ฟังก์ชันนี้ส่งออกสำเนาข้อความย่อยจากภายใน string ตัวอย่าง
$test = "การให้บริการลูกค้าของท่านดีเยี่ยม"
ถ้าเรียกฟังก์ชันด้วยตัวเลขจำนวนมากสำหรับ start (มีเฉพาะ start ) จะได้ข้อความจาก start ไปยังสิ้นสุดข้อความ
substr($test, 1);
ส่งออก"การให้บริการลูกค้าของท่านดีเยี่ยม"
หมายเหตุ    ตำแหน่งเริ่มต้นข้อความเริ่มจาก 0 และด้วย arrayถ้าเรียก substr () ด้วยตัวเลขจำนวนลบสำหรับ start ( มีเฉพาะ start ) จะได้ข้อความจากท้ายของข้อความลบด้วยตัวอักษรจำนวน start ไปยังสิ้นสุดข้อความ ตัวอย่าง
substr($test, -8);
ส่งออก "ดีเยี่ยม"
พารามิเตอร์ length สามารถใช้ระบุได้ทั้งจำนวนตัวหนังสือส่งออก (ถ้าเป็นค่าบวก) หรือตัวอักษรสุดท้ายของลำดับส่งออก (ถ้าเป็นค่าลบ) ตัวอย่าง
substr($test, 0, 6);
 ส่งออก 6 ตัวอักษรแรกของข้อความคือ "การให้" คำสั่งต่อไป
substr($test, 6, -15);
ส่งออกตัวอักษรระหว่างตัวอักษรที่ 4 ถึงตัวที่ 15 จากตัวอักษรสุดท้าย คือ "บริการลูกค้า"

การค้นหาและเปรียบเทียบข้อความ
ในการประยุกต์ทั่วไปมีโอกาสในการค้นหาข้อความย่อยภายในข้อความใหญ่ เช่น การค้นหารายชื่อหนังสือ  ด้วยคีย์เวิร์ดของหัวข้อ บทความบนเว็บหนังสือพิมพ์

ฟังก์ชัน strstr
การค้นหาข้อความภายในอีกข้อความสามารถใช้ฟังก์ชัน strstr (), strchr (), strrchr () หรือ stristr()
    ฟังก์ชัน strstr () มีลักษณะทั่วไปมากที่สุดและสามารถใช้ค้นหาข้อความหรือตัวอักษรที่ตรงกับภายในข้อความยาวกว่า ใน PHP ฟังก์ชัน strchr () เหมือนกับ strstr () ถึงแม้ว่าชื่อมีนัยยะว่าใช้ค้นหาตัวอักษรในข้อความเหมือนกับภาษา C ใน PHP ฟังก์ชันเหล่านี้สามารถใช้ค้นหาข้อความภายในข้อความ รวมถึงการค้นหาข้อความที่เก็บเพียง 1 ตัวอักษร
ไวยากรณ์ของ strstr () คือ
string strstr (string haystack, string needle);
ส่งผ่าน haystack สำหรับการค้นหา และค้นด้วยข้อความ needle ถ้าตรงกับ needle ฟังก์ชันนี้ส่งออก haystack จาก needle  ต่อไป กรณีอื่นส่งออก FALSE ถ้า needle ปรากฏมากกว่า 1 ครั้ง ข้อความส่งออกจะเริ่มต้นจาก needle  ที่ปรากฏครั้งแรก
<?php
//
// strstr function
$mystring = "Your customer service is excellent";
 if (strstr($mystring, "service"))
    $dept = "services";
else if (strstr($mystring, "shop"))
    $dept = "retail";
else if (strstr($mystring, "bill"))
    $dept = "account";
else
    $dept = "customer relation";
echo $dept."<br/>\n";
?>
คำสั่งนี้ตรวจสอบคีย์เวิร์ดในข่าวสารตอบกลับและเลือกบุคคลที่เกี่ยวข้อง ถ้าในตัวอย่างการตอบกลับของลูกค้าคือ "Your customer service is excellent." เมื่อพบข้อความ "service" แผนกที่เกี่ยวข้องคือ "services" โดย haystack ส่งออกคือ"service is excellent"
strstr () มี 2 อนุพันธ์ อนุพันธ์แรกคือ stristr () ซึ่งใกล้เคียงมากแต่ต่างกันที่ตัวพิมพ์ไม่มีผล ฟังก์ชันนี้มีประโยชน์สำหรับโปรแกรมประยุกต์ เมื่อลูกค้าอาจจะป้อนข้อความเป็น  "service", "Service" หรือ "SERVICE"
อนุพันธ์ที่ 2  คือ strrchr () ซึ่งใกล้เคียงมาก แต่ส่งออก haystack จาก needle ครั้งสุดท้าย

ฟังก์ชัน strpos (mb_strpos) และ strrpos (mb_strrpos)
ฟังก์ชัน strpos (mb_strpos) และ strrpos (mb_strrpos) ทำงานคล้ายกับ strstr() ยกเว้นแทนที่การส่งออกข้อความย่อย แต่ส่งออกตัวเลขตำแหน่งของ needle ภายใน haystack

ฟังก์ชัน strpos () มีไวยากรณ์คือ  int strpos (string haystack, string needle, int [offset]);
ตัวเลขจำนวนเต็มส่งออกแสดงตำแหน่งการปรากฏครั้งแรกของ needle ภายใน haystack ตัวอักษรแรกมีตำแหน่งเป็น 0
ตัวอย่าง การใช้ฟังก์ชัน strops
<?php
//
// strpos function
$mystring = "กุหลาบ สายประดิษฐ์ เจ้าของนามปากกา ศรีบูรพา";
// ค้นหาตัวอักษร
$pos1 = strpos($mystring,"ร");
// ค้นหาข้อความย่อย
$pos2 = strpos($mystring, "เจ้า");
// ค้นหาตัวอักษร เริ่มจาก 15
$pos3 = strpos($mystring, "ร", 15);
//  ค้นหาด้วย mb_strpos
$mbpos = mb_strpos($mystring, "ร");
echo "strpos, mb_strpos function<br/>\n";
echo "\$pos1: $pos1 \$pos2: $pos2 \$pos3: $pos3 \$mbpos: $mbpos <br/>\n";
?>
 ผลลัพธ์
$idx1: 11 $idx2: 19 $idx3: 36 $mbidx: 11
needle สามารถเป็นข้อความได้ตาม $pos2
พารามิเตอร์ตัวเลือก offset ได้รับการใช้เพื่อระบุตำแหน่งภายใน haystack สำหรับการเริ่มต้นค้นหา
$pos3 = strpos($mystring, "ร", 15);
คำสั่งนี้จะพิมพ์ค่า 36 ไปยัง browser เพราะ PHP เริ่มต้นมองหา "ร" จากตำแหน่งที่ 15 ดังนั้นไม่เห็นอีกตัวที่ตำแหน่งที่ 11
สำหรับ mb_strpos() มีประโยชน์กับภาษาจีน ญี่ปุ่น และเกาหลีมากกว่าภาษาไทย
ฟังก์ชัน strrpos() เกือบเหมือนกันแต่จะส่งออกตำแหน่งที่ปรากฏสุดท้ายของ needle ใน haystack  ฟังก์ชันนี้ต่างจาก strpos () ทำงานเฉพาะด้วยตัวอักษรเดียวของ needle  ดังนั้นถ้าส่งผ่านข้อความในฐานะ needle จะใช้เฉพาะตัวอักษรแรกของข้อความที่ค้นหา
ในกรณีอื่น ถ้า needle ไม่ใช่ข้อความ strpos () หรือ strrpos () จะส่งออก FALSE สิ่งนี้สามารถเกิดปัญหาเพราะ FALSE ในภาษาที่มีประเภทข้อมูลอ่อนแอ เช่น PHP จะเทียบเท่ากับ 0 นั่นเป็นตัวอักษรแรกในข้อความ
การหลีกเลี่ยงปัญหาใช้ = = operator เพื่อทดสอบค่าส่งออก
$pos = strpos($mystring, "ก");
if ($pos === FALSE)
    echo "ไม่พบ";
else
    echo "พบที่ตำแหน่ง 0";
 หมายเหตุ    วิธีการนี้ทำงานเฉพาะใน PHP4 และเวอร์ชันต่อมา ในเวอร์ชันก่อนหน้านี้ สามารถทดสอบ FALSE โดยการทดสอบค่าส่งออกเพื่อดูว่าเป็นข้อความหรือไม่

ฟังก์ชัน strcmp และ strnmp
ฟังก์ชัน strcmp ()  เปรียบเทียบข้อความด้วยไบต์ ( จึงสามารถค้นหาข้อความที่มีตัวอักษรไบนารีพิมพ์ไม่ได้) และตัวพิมพ์มีผล โดยส่งออก 3 ค่า
-1 ชี้ว่าข้อความแรก "เล็กกว่า" ข้อความที่ 2
0 ชี้ว่าข้อความนี้เท่ากัน
1 ชี้ว่าข้อความแรก "ใหญ่กว่า" ข้อความที่ 2
ฟังก์ชัน strcmp () มีจำกัดในการเปรียบเทียบค่าไบต์เพื่อพิจารณา "ใหญ่กว่า" และ "เล็กกว่า" ตามค่าในตารางตัวอักษร ตัวพิมพ์เล็กมีตัวเลขน้อยกว่าตัวพิมพ์ใหญ่ หมายความว่า "z" น้อยกว่า "A"
ไวยากรณ์สำหรับ strcmp () คือ
int strcmp ( string str1, string str2);
ฟังก์ชัน strncmp ()  เหมือนกับ strcmp ()  ยกเว้นใช้เปรียบเทียบ n ตัวอักษรแรกข้อความได้ด้วยการส่งผ่านพารามิเตอร์ที่ 3
<?php
// strcmp เปรียบเทียบตัวพิมพ์ ลำดับตัวอักษร
$str1 = "Rat";
$str2 = "rat";
$str3 = "Cat";
$cmpa = strcmp($str1, $str2);
$cmpb = strcmp($str2, $str3);
echo "1. strcmp> \$cmpa: $cmpa, \$cmpb: $cmpb <br/>\n";
//  strncmp เปรียบเทียบ 3 ตัวอักษร
$str1 = "แม่น้ำเจ้าพระยา";
$str2 = "แม่จัน";
$cmpn = strncmp($str1, $str2, 3);
echo "2. strncmp: $cmpn <br/>\n";
?>
ผลลัพธ์
1. strcmp> $cmpa: -1, $cmpb: 1
2. strncmp: 0
ฟังก์ชัน strcasecmp () เหมือนกับ strcmp() และ ฟังก์ชัน strncasecmp () เหมือนกับ strncmp() ยกเว้นตัวพิมพ์ไม่มีผล
ฟังก์ชัน strnatcmp () และ strnatcasecmp () ฟังก์ชันคู่นี้ตัวพิมพ์ไม่มีผล  ได้รับการเพิ่มใน PHP4 ฟังก์ชันนี้เปรียบเทียบข้อความตาม "ลำดับธรรมชาต" ซึ่งใกล้เคียงกับการใช้ของคน ตัวอย่าง  strcmp() จัดลำดับข้อความ "2" มากกว่าข้อความ "12" เพราะใหญ่กว่า strnatcmp() ทำในอีกวิธีหนึ่งตามพจนานุกรม

การแทนที่ข้อความย่อย
การแทนที่ข้อความมีประโยชน์กับการประยุกต์เว็บบอร์ด สมุดเยี่ยม ที่เปิดโอกาสบุคคลทั่วไปแสดงความเห็น ในบางครั้งอาจจะมีการใช้คำไม่เหมาะสม

ฟังก์ชัน str_replace และ substr_replace
ฟังก์ชัน str_replace () และ substr_replace () สามารถค้นหาและแทนที่ โดยสามารถใช้กับข้อความ ในเอกสารที่สร้างโดย PHP ตัวอย่าง การแทนที่ <<province>> ด้วยชื่อจังหวัด และ <<address>> ด้วยที่อยู่
ในวัตถุประสงค์นี้ สามารถใช้ฟังก์ชันข้อความหรือนิพจน์ปกติ
ส่วนใหญ่การแทนที่ใช้ str_replace () และมีไวยากรณ์ คือ
string str_replace (string needle, string new_needle, string haystack);
ฟังก์ชันนี้จะแทนที่ instance ทั้งหมดของ needle ใน haystack ด้วย new_needle
 <?php
$mystring =<<<TESTSTRING
เราต้องช่วยเหลือชุมชนของเรา
เราต้องร่วมมือร่วมใจพัฒนาชุมชน
เราจึงจะอยู่ด้วยกันอย่างมีความสุข
TESTSTRING;
$repalce = "เรา";
$replaceby = "เขา";
$newstring = str_replace($repalce, $replaceby, $mystring);
echo nl2br($newstring);
?>
ผลลัพธ์
เขาต้องช่วยเหลือชุมชนของเขา
เขาต้องร่วมมือร่วมใจพัฒนาชุมชน
เขาจึงจะอยู่ด้วยกันอย่างมีความสุข
ตัวอย่าง ลูกค้าหรือผู้เยี่ยมชมที่แสดงความเห็นบนสมุดเยี่ยมบนอินเตอร์เน็ตของบริษัท ในการตำหนิ บางครั้งอาจจะมีการใช้คำหยาบ ซึ่งไม่เหมาะสมกับการปรากฎบนพื้นที่สาธารณะ
$comment = str_replace($replace, "!^",$comment);
substr_replace () ใช้ในการค้นหาและแทนที่เฉพาะข้อความย่อยในข้อความโดยมีไวยากรณ์ คือ
string substr_replace (string string, string replacement, int start, int [length]);
ฟังก์ชันนี้จะแทนที่ส่วนของข้อความ string ด้วยข้อความ replacement ส่วนใดที่ถูกแทนที่ขึ้นกับค่าของ start และพารามิเตอร์ตัวเลือก length

นิพจน์ปกติ
     PHP สนับสนุนไวยากรณ์นิพจน์ปกติ (Regular Expression) 2 รูปแบบ คือ POSIX และ Perl รูปแบบ POSIX ของนิพจน์ปกติ ได้รับการคอมไพล์ไปยัง PHP ตามค่าเริ่มต้น แต่สามารถใช้รูปแบบ Perl โดยการคอมไพล์ในไลบรารี PCRE (Perl - Compatible Regular Expression) ในบทเรียนนี้จะกล่าวถึงรูปแบบ POSIX ส่วนรูปแบบ Perl หรือการเรียนรู้เกี่ยวกับ PCRE สามารถอ่านได้จากคู่มือบนเว็บที่ http://au3.php.net/manual/en/ref.pcre.php
การใช้ฟังก์ชันข้อความมีความจำกัดในค้นหา ถ้าต้องทำการจับคู่ซับซ้อนควรใช้นิพจน์ปกติที่มีประสิทธิภาพดีกว่า นิพจน์ปกติเรียนรู้ได้ลำบากในตอนต้นแต่สามารถใช้ประโยชน์ได้มาก

เบื้องต้น
นิพจน์ปกติเป็นวิธีการของการอธิบายแบบแผนข้อความ การเปรียบเทียบกับนิพจน์ปกติเป็นการประมวลของ engine กับนิพจน์นั้น ตัวอย่าง การมองหาหมายเลขโทรศัพท์สามารถสร้างนิพจน์ของหมายเลขโทรศัพท์ นอกจากมองหาตัวเลข 0-9 แล้ว ยังควรพิจารณาเครื่องหมายขีดแบ่งชุดตัวเลข เช่น ขีดแบ่งระหว่างตำแหน่งที่ 5 กับ 6
      การจับคู่นิพจน์ปกติใน PHP ทำได้มากกว่าฟังก์ชันข้อความ เช่น strstr () จับคู่แทนที่การเปรียบเทียบเท่ากันทีละค่า
ตัวอักษรพิเศษสามารถใช้ระบุ meta_meaning เพื่อเพิ่มการจับคู่ตัวอักษรอย่างละเอียด ตัวอย่าง ตัวอักษรพิเศษสามารถระบุถึงแบบต้องปรากฏที่จุดเริ่มต้นหรือสิ้นสุดข้อความ ส่วนของแบบสามารถซ้ำได้หรือตัวอักษรนั้นในแบบต้องเป็นประเภทเฉพาะ รวมถึงสามารถจับคู่การปรากฏตามตัวอักษรของตัวอักษรเฉพาะ

Character Class
การใช้ชุดตัวอักษรทำให้นิพจน์ปกติมีความสามารถมากกว่านิพจน์จับคู่ละเอียด ชุดตัวอักษรสามารถใช้จับคู่ตัวอักษรต่างๆ ของประเภทเฉพาะได้แก่ ชนิดของ wildcard
สิ่งแรก , จุลภาค เป็น wildcard สำหรับตัวอักษรเดียว ยกเว้น บรรทัดใหม่ "\n" ตัวอย่าง นิพจน์ปกติ
,at
จับคู่ได้กับข้อความ "cat", "sat" และ "mat"
wildcard ชนิดนี้มักจะใช้กับการจับคู่ชื่อไฟล์ในระบบปฏิบัติการ
การระบุทำได้มากขึ้นกับประเภทตัวอักษรด้วยนิพจน์ปกติตามความต้องการและสามารถระบุเป็นชุดที่ตัวอักษรเป็นส่วนหนึ่ง ตัวอย่างก่อน นิพจน์ปกติจับคู่ "cat" และ "mat" รวมถึง "#at" ถ้าต้องการจำกัดตัวอักษรให้อยู่ระหว่าง a ถึง z สามารถระบุได้ดังนี้
[a - z]
สิ่งที่หุ้มอยู่ภายในวงเล็บสี่เหลี่ยม [ ] คือ class และตัวอักษรคือ ชุดตัวอักษรที่ต้องอยู่ภายในกลุ่มนี้
หมายเหตุ    นิพจน์ในวงเล็บสี่เหลี่ยมจับคู่ตัวอักษรเพียงตัวเดียว
ตัวอย่าง กำหนดรายการตัวอักษร
[aeiou]
 รวมถึงสามารถกำหนดเป็นช่วงด้วยการใช้ขีด (hyphen) หรือชุดช่วง
[a-zA-Z]
ชุดของช่วงนี้ใช้สำหรับตัวอักษรไม่ได้เป็นสมาชิกของชุด เช่น
[^a-z]
จับคู่ตัวอักษรที่ไม่ได้อยู่ในช่วง a ถึง z สัญลักษณ์ caret (^) หมายถึง ไม่  เมื่อวางอยู่ภายในวงเล็บสี่เหลี่ยม และมีอีกความหมาย หรือ ใช้ภายนอกวงเล็บสี่เหลี่ยม
นอกจากการระบุรายการชุดและช่วงแล้ว character classมาตรฐานที่สามารถใช้ในนิพจน์ปกติได้รับการแสดงในตาราง 1.5.3
ตาราง 1.5.3 character class สำหรับใช้ในนิพจน์ปกติ POSIX
Class
การจับคู่
[[:alnum:]]
ตัวอักษร alphanumeric
[[:alpha:]]
ตัวอักษร alphabetic
[[:lower:]]
ตัวพิมพ์เล็ก
[[:upper:]]
ตัวพิมพ์ใหญ่
[[:aigit:]]
เลขฐานสิบ
[[:xdigit:]]
เลขฐานสิบหก
[[:punct:]]
เว้นวรรค punctuation
[[:blank:]]
tab และ space
[[:space:]]
ตัวอักษร whitespace
[[:cntrl:]]
ตัวอักษรควบคุม
[[:print:]]
ตัวอักษรพิมพ์ได้ทั้งหมด
[[:graph:]]
ตัวอักษรพิมพ์ได้ทั้งหมด ยกเว้น space

 การซ้ำ
ตามปกติ มักมีความต้องการระบุถึงการปรากฏหลายครั้งของข้อความเฉพาะหรือ character class การนำเสนอนี้สามารถใช้ 2 ตัวอักษรพิเศษในนิพจน์ปกติ สัญลักษณ์  * หมายความว่า แบบนั้นสามารถทำซ้ำ ศูนย์ครั้งหรือมากกว่า และสัญลักษณ์ + หมายความว่าแบบนั้นสามารถทำซ้ำ 1 ครั้ง หรือมากกว่า สัญลักษณ์ที่ต้องปรากฏโดยตรงหลังจากส่วนของนิพจน์ที่ประยุกต์ ตัวอย่างเช่น [[:alnum:]]
หมายความว่า "อย่างน้อย 1 ตัวอักษร alphanumeric"

นิพจน์ย่อย
การแบ่งนิพจน์เป็นนิพจน์ย่อยสามารถใช้ประโยชน์ ตัวอย่าง "แสดงอย่างน้อย 1 ข้อความของข้อความเหล่านี้ตามด้วยหนึ่งในนั้น" การทำสิ่งนี้ด้วยการใช้วงเล็บเหมือนกับการใช้นิพจน์เลขคณิต เช่น (very) * large
จับคู่ได้กับ "large", "very large", "very very large" และอื่นๆ
      การนับนิพจน์ย่อยสามารถระบุจำนวนครั้ง ให้ทำซ้ำ สามารถใช้นิพจน์ตัวเลขในวงเล็บปีกกา ( { } ) สามารถแสดงตัวเลขการซ้ำ ( { 3 } หมายความว่า ซ้ำ 3 ครั้ง ) ช่วงการซ้ำ ( { 2,4 } หมายความว่า จาก 2 ถึง 4 ครั้ง หรือ ช่องท้ายการซ้ำเปิด ( { 2,} หมายความว่าอย่างน้อย 2 ครั้ง ตัวอย่างเช่น
(very) {1,3}
จับคู่ "very", "very very" และ "very very very"
    ข้อความที่มีการสะกดซ้ำ ตัวอย่าง doomed, domed, dmed, doooomed สามารถเขียนนิพจน์ค้นหาตัวอักษรซ้ำได้
d{1,2}ed
จับคู่ได้กับ doomed และ domed
d{1, }ed
doomed, domed, และ doooomed

ระบุจุดเริ่มต้นหรือสิ้นสุดของข้อความ
นิพจน์ย่อยสามารถระบุการปรากฏจุดเริ่มต้น สิ้นสุดหรือทั้งคู่ การระบุนี้มีประโยชน์เล็กน้อย เมื่อต้องการทำให้มั่นใจว่าค้นหาเฉพาะพจน์และไม่มีสิ่งใดปรากฏในข้อความ
สัญลักษณ์ caret (^) ได้รับการใช้ที่จุดเริ่มต้นของนิพจน์ปกติเพื่อแสดงการปรากฏที่จุดเริ่มต้นของการค้นหาข้อความ และ $ ได้รับการใช้ที่จุดสิ้นสุดของนิพจน์ปกติ เพื่อแสดงการปรากฏที่จุดสิ้นสุด
ตัวอย่าง การจับคู่  chaiwat ที่จุดเริ่มต้นข้อความ
^chaiwat
การจับคู่ com ที่ท้ายข้อความ
com$
ตัวอย่างสุดท้าย การจับคู่กับตัวอักษรเดียวจาก a ถึง z ในข้อความ
^[a-z]$

Branch
การแสดงตัวเลือกในนิพจน์ปกติสามารถใช้ vertical pipe ( | ) ตัวอย่างเช่น ถ้าต้องการค้นหา com, edu หรือ net สามารถใช้นิพจน์นี้
(com) | (edu) | (net)

ตัวอักษรพิเศษ
ถ้าต้องการจับคู่ตัวอักษรพิเศษ เช่น . { หรือ $ ต้องวาง slash ( \ ) ข้างหน้า ถ้าต้องการแสดง slash ต้องแทนที่ด้วย 2 slash ( \\ )
การสรุปตัวอักษรพิเศษทั้งหมดได้แสดงในตาราง 1.5.3 และ ตาราง 1.5.4 โดยตาราง 1.5.3 แสดงความหมายตัวอักษรพิเศษภายนอกวงเล็บสี่เหลี่ยม และ ตาราง 1.5.4 แสดงความหมายเมื่อใช้ภายในวงเล็บสี่เหลี่ยม

ตาราง 1.5.4 สรุปการใช้ตัวอักษรพิเศษในนิพจน์ปกติ POSIX ภายนอกวงเล็บสี่เหลี่ยม
ตัวอักษร
ความหมาย
\
ตัวอักษร escape
^
การจับคู่ที่จุดเริ่มต้นของข้อความ
$
การจับคู่ที่จุดสิ้นสุดของข้อความ
.
การจับคู่ตัวอักษรต่างๆ ยกเว้น บรรทัดใหม่ (\n)
/
เริ่มต้น branch ทางเลือก (อ่านว่า OR)
(
เริ่มต้นแบบย่อย
)
สิ้นสุดแบบย่อย
*
ซ้ำ 0 หรือ หลายครั้ง
+
ซ้ำ 1 หรือ หลายครั้ง
{
เริ่มต้น min/max quantifier
}
สิ้นสุด min/max quantifier
ตาราง 1.5.5 สรุปการใช้ตัวอักษรพิเศษในนิพจน์ปกติ POSIX ภายในวงเล็บสี่เหลี่ยม
ตัวอักษร
ความหมาย
\
ตัวอักษร escape
^
ไม่ เฉพาะการใช้ในตำแหน่งเริ่มต้น
-
ใช้ช่องตัวอักษรที่ระบุ

วิธีการเขียนนิพจน์ปกติ
วิธีการเขียนสามารถใช้สัญลักษณ์ เช่น ".*" หมายความว่า สามารถจับคู่กับตัวอักษรใดๆได้ ตัวอย่าง "*ไก่" จะครอบคลุมถึง "บ้านของฉันเลี้ยงไก่"
ตัวอย่าง IP address ที่มีรูปแบบ aaa.bbb.ccc.ddd สามารถเขียนเป็น
[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
{1,3} หมายถึงมีได้ 1 ถึง 3 ตำแหน่ง เนื่องจาก IP address มีหลายรูปแบบหมายเลข เช่น
5.2.7.8
192.152.0.5
255.255.205.14

การทำงานกับข้อความด้วยนิพจน์ปกติ
ฟังก์ชันของนิพจน์ปกติสามารถทำงานได้เหมือนกับรูปแบบฟังก์ชันข้อความแต่ในหลายกรณีทำงานได้มีประสิทธิภาพมากกว่า

การค้นหาข้อความย่อย
การค้นหาข้อความย่อยคือ การประยุกต์หลักของนิพจน์ที่เพิ่มพัฒนา 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 ส่วน และพิมพ์แยกคนละบรรทัด


ไม่มีความคิดเห็น:

แสดงความคิดเห็น