การใช้ RegExp และการกรองคำหยาบ  
โดย: สุรัตน์ บัณฑิตลักษณะ
ที่มา: www.thaiasp.net
 
     ฟังชื่อหัวข้อแล้วดูเหมือนจะไม่ Beginner เท่าไหร่ใช่มั้ยครับ ผมเชื่อว่า โปรแกรมเมอร์ระดับเซียนหลายคน อาจจะยังไม่เคยสัมผัสกับ object RegExp กันด้วยซ้ำ ไม่แปลกหรอกครับ ผมก็เพิ่งมาหัดใช้ไม่นานนี้ เหมือนกัน แต่... ปัทโธ่เอ๊ย!!!! ทำไม่มันใช้ง่ายอย่างงี้เนี่ย เลยให้มัน อยู่ในหัวข้อ Beginner ซะเลย
ทำความเข้าใจว่า RegExp คืออะไร
RegExp เป็น Object ที่คิดขึ้น เพื่อจุดประสงค์หลักในการ ค้นหาคำ หนึ่ง คำ ใน ข้อความ 1 ข้อความ การเริ่มต้นทำงาน ของ Object RegExp ก็เหมือนกับ Object อื่นๆ ครับ ต้องใช้คำว่า "Set" และที่พิเศษก็คือ จะใช้คำว่า "New" ในการสร้าง Object ใหม่ ส่วนคำที่ต้องการค้นหา จะถูกระบุใน Pattern โม้มากก็ทำให้ไม่เข้าใจเปล่าๆ นะครับ

เอาเป็นยกตัวอย่างกันง่ายๆ ก่อนละกัน เช่น
- ผมต้องการหาคำว่า "หมีน้อย" ในข้อความชุดหนึ่งคือ "โรงเรียน ช่างกลหมีน้อย อนุบาล ลูกทุกสถาบัน" ผมก็จะเขียนโค้ดดังนี้ครับ

<%' เริ่มต้นด้วยการสร้าง Object ชื่อ ObjRegEx
Set ObjRegEx = New RegExp
' กำหนด คำที่ต้องการหาใน Pattern
ObjRegEx.pattern="หมีน้อย"
' Test จะเป็นผลในการค้นหาครับ ถ้าเป็น True ก็แสดงว่า หาเจอ ถ้าเป็น False คือ หาไม่เจอ
Result=ObjRegEx.Test("โรงเรียน ช่างกลหมีน้อย อนุบาล ลูกทุกสถาบัน")
If Result="True" Then
Response.Write("พบคำว่า หมีน้อยครับ")
Else
Response.Write("หาไม่เจอครับ")
End If
%>

ผลลัพธ์ของตัวอย่างข้างบน ก็คงไม่ต้องบอกกันครับ ขึ้นคำว่า "พบคำว่า หมีน้อยครับ" อยู่แล้ว
เริ่มจะนึกวิธีนำไปใช้ประโยชน์กันได้รึยังครับ :-)
  
ลองกรอกคำหยาบกันหน่อยซิ
ผมคำต้องจำลองสถานการณ์ การกรองคำหยาบ มาเป็นแค่ไฟล์ 2 ไฟล์นะครับ คือ
1. ไฟล์ PostBadWord.html เอาไว้กรอกข้อความ
2. ไฟล์ CheckBadWord.asp เอาไว้ตรวจสอบคำหยาบ
ผู้อ่านคงต้องเอาไปประยุกต์ใช้กันเอง

1.PostBadWord.html
<form method="post" action="CheckBadWord.asp">
<textarea name="wording"></textarea>
< input type="submit" name="Submit" value="Submit">
</form>


2.CheckBadWord.asp
<%'เก็บข้อความที่ Post เข้าตัวแปร wording
wording=
Request("wording")
Set ObjRegEx = New RegExp
'เก็บคำหยาบไว้ใน array เลยครับ เผื่อมีเยอะ
badword=array("หมีน้อย","ควายป่า","ช้างน้ำ","นกกระจอก")
point=0
'ใช้ For เพื่อวนเช็คคำหยาบทั้งหมด
For i=0 to UBound(badword)
ObjRegEx.pattern=badword(i)
'เอาคำหยาบที่อยู่ใน Array มาตรวจสอบ
Result=ObjRegEx.Test(wording)
If Result="True" Then
Point=Point+1
'ถ้าเจอคำหยาบ เราก็บวกแต้ม
End If
Next

'ตรวจสอบจากค่า Point ครับ ว่า เจอคำหยาบรึเปล่า
If Point > 0 then
Response.Write("เจอคำหยาบครับ กรุณาสุภาพด้วย")
Else
Response.Write("สุภาพมากครับ ไม่พบคำหยาบเลย")
End If
%>

ตามสูตรครับ ถ้าผู้อ่านขี้เกียจทำกันเอง ก็ลองเล่น ที่นี่ ครับ ลอง Post คำอะไรก็ได้ดู แต่อย่าลืมว่า คำหยาบของผมในที่นี้มีแค่ "หมีน้อย","ควายป่า","ช้างน้ำ","นกกระจอก" Post คำหยาบกันจริงๆ แล้วผม เช็คไม่ได้ ก็ว่ากันไม่ได้นะครับ