การใช้งาน character classes ใน Regular Expressions ของ PHP

03 February 2011

รูปแบบการขึ้นต้นด้วย เครื่องหมายปีกกาสี่เหลี่ยมเปิด ( [ ) และปิดด้วยด้วยเครื่องหมายปีกกาสี่เหลี่ยมปิด ( ] ) เป้นการใช้งาน Regular Expressions ในส่วนของ character class

โดยหลักของ Character class ตัวอักขระที่อยู่ในปีกกาสี่เหลี่ยม เปิด ปิด ( [] ) หมายถึงเงื่อนไขว่า
มีตัวอักขระ นั้นๆ  ตัวหนึ่งตัวใด หรือไม่ เช่น
ตัวอย่าง
รูปแบบ pattern /[aeiou]/
- หมายถึง ถ้ามีตัวอักษร a หรือ e หรือ i หรือ o หรือ u จะเข้าเงื่อนไขของรูปแบบ pattern

ตัวอย่างการใช้งานร่วมกับ โค้ด PHP

<?php
$data_test="hotmail google yahoo geegle facebook";
echo preg_match_all('/[hfg]/',$data_test,$matches);
// ค่า echo ที่ได้จะเท่ากับ 7 ซึ่งคือจำนวนค่าที่ตรงกับเงือนไขตามรูปแบบ pattern
// โดย เป็นตัว h 2 ตัว ตัว g 4 ตัว และตัว f อีก 1 ตัว
// อยู่ในตัวแปรอาเรย์ชื่อว่า $matches
// มีค่าตังนี้คือ $matches[0]=h;
// $matches[0] เท่ากับ h;
// $matches[1] เท่ากับ g;
// $matches[2] เท่ากับ g;
// $matches[3] เท่ากับ h;
// $matches[4] เท่ากับ g;
// $matches[5] เท่ากับ g;
// $matches[6] เท่ากับ f;
?>

หมายเหตุ::  preg_match_all จะต่างจาก preg_match
ตรงที่ preg_match จะตรวจสอบจนพบค่าแรกที่ตรงกับเงื่อนไข pattern ค่าเดียวเท่านั้น แล้วหยุดการตรวจสอบ
ขณะที่ preg_match_all จะทำการตรวจสอบค่าทั้งหมดที่ตรงกับเงื่อนไข pattern

รูปแบบ pattern จะเข้าเงื่อนไข เมื่อ ตัวอักขระ ตัวหนึ่งตัวใดปรากฏในข้อความที่ต้องการตรวจสอบ เว้นเสียแต่
ที่ตัวอักขระตัวแรกเป็นเครื่องหมาย ( ^ ในที่นี้ ขอเรียกว่าเครื่องหมายรูปหมวก) ซึ่งหมายถึง ต้องไม่มีอักขระใดๆ ที่
แสดงใน character class
ตัวอย่าง
รูปแบบ pattern /[^aeiou]/
- หมายถึง ถ้ามีตัวอักษรที่ไม่ใช่ a หรือ e หรือ i หรือ o หรือ u จะเข้าเงื่อนไขของรูปแบบ pattern

 

สำหรับในกรณีที่ต้องมีการตรวจสอบเครื่องหมายรูปหมวก (^) สามารถกำหนดได้โดย ต้องไม่ให้เครืองหมาย
รูปหมวก (^) อยู่ที่ตำแหน่งแรก หรือ จะใช้เครื่องหมาย ( \ ) เมื่อต้องการตรวจสอบอักขระนี้ในรูปแบบ pattern เช่น

รูปแบบ pattern /[aeio\^u]/
- หมายถึง ถ้ามีตัวอักษร a หรือ e หรือ i หรือ o หรือ ^ หรือ u จะเข้าเงื่อนไขของรูปแบบ pattern

ถ้ามีการกำหนด Pattern Modifiers เป็น case-insensitive คือใช้ตัว i ซึ่งจะหมายถึง เป็นตัวพิมพ์เล็ก หรือตัว
พิมพ์ใหญ่ก็ได้ ( อ่านเพิ่มเติมเกี่ยวกับ Pattern Modifiers ได้ที่ http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php )

ตัวอย่าง
รูปแบบ pattern /[aeiou]/i
- หมายถึง ถ้ามีตัวอักษร a หรือ e หรือ i หรือ o หรือ u รวมถึงตัวพิมพ์ใหญ่ด้วย จะเข้าเงื่อนไขของรูปแบบ pattern

ตัวอย่าง
รูปแบบ pattern /[^aeiou]/i
- หมายถึง ถ้ามีตัวอักษรที่ไม่ใช่ a หรือ e หรือ i หรือ o หรือ u รวมถึงตัวพิมพ์ใหญ่ด้วย จะเข้าเงื่อนไขของรูปแบบ pattern


 

ตัวอักขระขีดกลาง หรือเครื่องหมายลบ ( - ) หรือจะเรียกว่า (hyphen) จะถูกใช้สำหรับกำหนดช่วงของตัวอักษร ตัวอย่างเช่น 
รูปแบบ pattern /[d-m]/
- หมายถึง ถ้ามีอักขระช่วงตัวอักษร d ถึง m จะเข้าเงื่อนไข pattern คือ ถ้ามีตัว d e f g h i j k l หรือ m

และสามารถใช้เป็นอักขระตรวจสอบ โดยการใช้เครื่องหมาย ( \ )  ซึ่งโดยทั่วไปจะไว้ด้านหน้า หรือด้านหลังของ
character class
ตัวอย่างเช่น 
รูปแบบ pattern /[d-m\-]/
- หมายถึง ถ้ามีอักขระช่วงตัวอักษร d ถึง m หรือเครื่องหมาย - จะเข้าเงื่อนไข pattern
คือ ถ้ามีตัว d e f g h i j k l หรือ m หรือเครื่องหมาย -


 

การกำหนด อักขระ ] ต่อท้ายช่วงของ character class
ตัวอย่างเช่น
รูปแบบ pattern /[W-]46]/
- จะไม่ได้หมายถึง จากตัว W ถึงเครื่องหมาย } แต่จะหมายถึงตัวอักขระ 2 ตัว คือ
มีตัว W หรือ -  แล้วตามด้วย 46]
ดังนั้นข้อความ  W46] หรือ -46] จึงเข้าเงื่อนไขตามรูปแบบ pattern ข้างต้น

อยากไรก็ตาม หากมีการตรวจสอบเครื่องหมาย ] ในรูปแบบ pattern จะต้องใช้เครื่องหมาย ( \ )
ตัวอย่างเช่น
รูปแบบ pattern /[W-\]46]/

 

การใช้งานกับช่วงลำดับของค่า ASCII ยังสามารถใช้สำหรับกำหนดเป็นตัวเลขพิเศษ
ตัวอย่างเช่น
รูปแบบ pattern /[\000-\037]/
- หมายถึง
กำหนดช่วงสำหรับตัวเลขฐาน 8 ช่างค่าตั้งแต่ 000 - 037 
ดูตารางค่า ASCII พร้อมค่าในตัวเลขฐาน 8 ได้ที่
http://www.asciitable.com/

ตัวอย่าง
รูปแบบ pattern /[W-c]/i จะมีค่าเท่ากับ รูปแบบ pattern /[][\^_`wxyzabc]/i
ดูตารางเปรียบเทียบค่า ASCII ได้ที่
http://www.asciitable.com/

นอกจากเราอาจจะพบว่ามีการใช้งาน  backslash character เช่น
\d  --  ตัวเลขทุกตัว 0 - 9
\D  -- ตัวอักขระทุกตัว ยกเว้น เลข 0 - 9
\s  --  ช่องว่างทุกตัว
\S  -- ตัวอักขระทุกตัว ยกเว้นช่องว่าง
\w -- ตัวอักษร ตัวเลข ทุกตัว ยกเว้นตัวอักขระพิเศษ . \ + * ? [ ^ ]  % $ ( ) { } = ! < > | : -
\W  -- ตัวขระพิเศษทุกตัว และช่องว่าง ยกเว้น ตัวอักษร และตัวเลข

ปรากฏอยู่ใน character class
ตัวอย่างเช่น
รูปแบบ pattern /[^\W_]/
- พิจารณาแต่ละตัว
- มีเครื่องหมาย ^ แสดงว่าเป็นค่า invert หรือตรงข้าม
- \W คือ ตัวขระพิเศษทุกตัว และช่องว่าง ยกเว้น ตัวอักษร และตัวเลข ดังนั้น เป็นค่าตรงข้าม จึงหมายถึง
ตัวอักษร ตัวเลข ทุกตัว ยกเว้นตัวอักขระพิเศษ . \ + * ? [ ^ ]  % $ ( ) { } = ! < > | : -
- _ คือเครื่องหมาย underscore ดังนั้น เป็นค่าตรงข้าม จังหมายถึง ต้องไม่เป็นเครื่องหมาย underscore  ( _ )
- โดยสรุป คือ เป็น ตัวอักษร ตัวเลข ทุกตัว ยกเว้นตัวอักขระพิเศษ . \ + * ? [ ^ ]  % $ ( ) { } = ! < > | : - และ
ไม่เป็นเครื่องหมาย underscore (_)

ตัวอักขระอื่นๆ ที่ไม่ใช่ตัวเลข และตัวอักษร ไม่มีความพิเศษใดๆ ใน character class
หากต้องการตรวจสอบอักขระพิเศษนั้นๆ สามารถใช้เครื่องหมาย ( \ ) กำกับไว้ด้านหน้าได้
ยกเว้น  \, -, ^ ที่อยู่ตำแหน่งเริ่มต้น และเครื่องหมาย ]

 

ใน Regular Expressions เรายังสามารถใช้งานรูปแบบ POSIX notation
ใน character class ได้ โดยระบุชื่อ POSIX notation  ไว้ในเครื่องหมาย [:  :]
ตัวอย่างเช่น
รูปแบบ pattern /[01[:alpha:]%]/
- หมายถึงเลข 0 หรือ 1 หรือ ตัวอักษรภาษาอังกฤพิมพ์เล็ก พิมพ์ใหญ่ หรือ % จะเข้าเงื่อนไขของ pattern


class names ที่ใช้ใน Character classes
alnum     ตัวอักษรภาษาอังกฤพิมพ์เล็ก พิมพ์ใหญ่ และตัวเลข
alpha      ตัวอักษรภาษาอังกฤพิมพ์เล็ก พิมพ์ใหญ่
ascii         ตัวอักขระทุกตัว ที่มีค่า ascii code ตั้งแต่ 0 - 127
 ตัวอักษรภาษาอังกฤพิมพ์เล็ก พิมพ์ใหญ่ ตัวเลข ตัวอักขระพิเศษ รวมช่องว่าง
blank      ช่องว่าง หรือว่า แท็บ
cntrl      control characters
digit      ตัวเลขอ 0 - 9 (เหมือนกับการใช้งาน \d)
graph     ตัวอักษรภาษาอังกฤพิมพ์เล็ก พิมพ์ใหญ่ ตัวเลข ตัวอักขระพิเศษ ไม่รวมช่องว่าง
lower       ตัวอักษรภาษาอังกฤพิมพ์เล็กทุกตัว
print        ตัวอักษรภาษาอังกฤพิมพ์เล็ก พิมพ์ใหญ่ ตัวเลข ตัวอักขระพิเศษ รวมช่องว่าง
punct        ตัวอักขระพิเศษทุกตัว ไม่รวมตัวอักษรภาษาอังกฤษ และตัวเลข
space     ช่องว่าง (ไม่เหมือนกับ \s เลยเสียทีเดียว)
upper      ตัวอักษรภาษาอังกฤพิมพ์ใหญ่
word      กลุ่มคำตัวอักษรภาษาอังกฤษ (เหมือนกับการใช้งาน  \w)
xdigit      ตัวเลขฐานสิบหก

 

การกำหนดค่าตรงข้าม ใน character class จะใช้อักขระ  ^
ตัวอย่าง เช่น
รูปแบบ pattern  /[12[:^digit:]]/
- หมายถึง เป็นเลข 1 หรือ 2 หรือ ตัวอักขระทุกตัวที่ไม่ใช่ ตัวเลข 0-9 ยกเว้นเลข 1 กับ 2 ข้างต้น

ตัวอักขระภาษาไทย จะไม่สามารถใช้งานกับการกำหนด pattern ด้วย Character classes แบบ POSIX notation ในลักษณะ [[:  :]] ที่กล่าวข้างต้นได้
แต่สามารถใช้ได้ในลักษณะ การกำหนดค่าในเครื่องหมายปีกกาสี่เหลี่ยมได้ เช่น
ตัวอย่าง เช่น
รูปแบบ pattern  /[กขคง]/
- หมายถึง เป็น ตัวอักษร ก ข ค หรือ ง เป็นต้น








บทความในหมวดที่่น่าสนใจ อื่นๆ PHP Learning

18 Mar 11 ทบทวน htaccess สำหรับ ให้ url เว็บมี www ด้านหน้าเสมอ มีการอัพเดท อ่าน 1285 26 Mar 10 ความแตกต่าง ระหว่าง ฟังก์ชัน strstr กับ strrchr และ การประยุกต์ ใช้งาน อ่าน 1272 28 May 10 แสดง การแจ้งเตือน ให้เปิด หรือ บันทึกไฟล์ที่ดาวน์โหลด ด้วย php อ่าน 1258 30 Oct 09 ฟังก์ชัน PHP แปลงตัวเลขอาราบิก เป็น ตัวเลขไทย อย่างง่าย อ่าน 1217 09 Nov 11 แนวทางการสร้างเมนูหลายภาษา อย่างง่ายด้วย php และ javascript อ่าน 1205 02 Mar 10 ประยุกต์ แปลเนื้อหา ในเว็บไซต์ด้วย google translater api สำหรับ php อ่าน 1195 02 Sep 10 สร้าง ฟังก์ชัน ค้นหาโดเมน check domain ว่าง อย่างง่าย ด้วย php อ่าน 1190 19 Jan 11 อักขระคั่น (Delimiters) ในการใช้งาน Regular Expressions ของ PHP อ่าน 1115 21 Jan 11 การใช้งาน Meta characters ใน Regular Expressions ของ PHP อ่าน 1097 14 Oct 11 การเชื่อมต่อ facebook และ ล็อกอิน แบบ popup ด้วย php sdk v.3.1.1 อ่าน 1006 13 Oct 11 แนะนำการใช้งาน การเชื่อมต่อ facebook ด้วย php sdk v.3.1.1 อ่าน 885 06 Jun 11 แนวทางการกำหนด expired header ให้กับรูปภาพ ด้วย php อย่างง่าย อ่าน 815

บทความคนเข้าอ่านวันนี้

22 Mar 10 ทบทวนคำสั่ง break และ continue ใน javascript อ่าน 2487 12 Nov 09 รู้จักกับ Ajax Events ใน jQuery อ่าน 4288 03 Feb 11 การใช้งาน character classes ใน Regular Expressions ของ PHP อ่าน 1329 27 Dec 10 การสร้าง ajax dictionary จาก longdo ด้วย jQuery อ่าน 2772 15 Mar 11 ทบทวน JavaScript SDK ของ facebook อ่าน 1590 14 Feb 09 คำนวณหาอายุ จากวันเกิด ด้วย php อ่าน 4650 31 Jul 10 javascript เรียกฟังก์ชัน ใน parent จาก iframe อ่าน 2818 19 Oct 08 คำสั่ง SQL COUNT อ่าน 6716 22 Mar 09 javascript หาความกว้างและความสูงของหน้าเพจได้ด้วยฟังก์ชันง่ายๆ อ่าน 1758 25 Sep 08 รู้จักฟังก์ชันของ jQuery ในการเรียกใช้ Class ใน CSS อ่าน 2778 13 Oct 08 คำสั่ง SQL AND OR อ่าน 3127 25 Sep 08 ตรวจสอบนามสกุลไฟล์ ก่อนทำการอัพโหลด อ่าน 3333 08 Oct 08 คำสั่ง SQL DISTINCT อ่าน 4956 04 Nov 08 การจำกัดจำนวนตัวอักษร ใน textarea ด้วย jquery อ่าน 4346 19 Aug 09 สร้าง เมนูแท็บ Tabs อย่างง่าย ด้วย jQuery UI อ่าน 10648 20 Mar 11 กำหนด รายละเอียด การใช้งาน facebook login button เพิ่มเติม อ่าน 1762 09 Sep 10 Google map API v.3 กับ jQuery ลากจุดหา พิกัด ค่า latitude และ longitude อ่าน 6686 26 Mar 10 ความแตกต่าง ระหว่าง ฟังก์ชัน strstr กับ strrchr และ การประยุกต์ ใช้งาน อ่าน 1272 26 Dec 10 แนะนำ PHP Simple HTML DOM Parser สำหรับ ดึงข้อมูล เฉพาะส่วนที่ต้องการ อ่าน 2917 16 Oct 08 CSS กับการตกแต่งกรอบรูปภาพ อ่าน 10702
จำนวนผู้เยี่ยมชม 798290
คน 2012 © Copyright ninenik.com. All rights reserved.