I'm a Ruby on Rails / jQuery web developer. Follow me at @sikachu

แก้ปัญหา character class preg_match กับภาษาไทยที่ใช้ unicode

September 17th, 2007 Posted in My Project, Programming

วันนี้พยายามลองเขียน regular expression เพื่อหาว่าตัวอักษรที่รับมาเป็นภาษาไทย และ ไม่ใช่สระลองเขียนๆ ดู ใช้ preg_match แล้วก็ character class ระหว่าง ก-ฮ ปรากฎว่าเจอเหตุการณ์ไม่คาดฝัน ..echo preg_match("/^[ก-ฮ]$/", "ก"); // => 1echo preg_match("/^[ก-ฮ]$/", "เ"); // => 1 ห๊ะ – -!ปรากฎว่า ลองดูไปดูมามันเป็นเพราะว่า ถ้าเราใช้ character class เนี่ย มันจะทำการเช็คแค่ byte แรกเท่านั้นแล้วภาษาไทยใน unicode มันใช้ทั้งหมด 3 bytes ..ดังนั้น มันจึงเช็คแค่ byte แรกแล้วก็บอกว่าข้อความนั้น match กันเลยทันที ..เพราะฉะนั้น วิธีการแก้ก็ง่ายๆ แค่กำหนดขนาดลงไป ..echo preg_match("/^[ก-ฮ]{3}$/", "ก"); // => 1echo preg_match("/^[ก-ฮ]{3}$/", "เ"); // => 0แค่นี้ก็เรียบร้อย :D

  • http://basketman.wordpress.com/2010/06/11/%e0%b9%81%e0%b8%81%e0%b9%89%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2-character-class-preg_match-%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%a0%e0%b8%b2%e0%b8%a9%e0% แก้ปัญหา character class preg_match กับภาษาไทยที่ใช้ unicode « Basketman's Blog

    [...] http://sikachu.com/   [...]

  • http://basketman.wordpress.com/2010/06/11/%e0%b9%81%e0%b8%81%e0%b9%89%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2-character-class-preg_match-%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%a0%e0%b8%b2%e0%b8%a9%e0% แก้ปัญหา character class preg_match กับภาษาไทยที่ใช้ unicode « Basketman's Blog

    [...] http://sikachu.com/ Possibly related posts: (automatically generated)Unicode Beginners Introduction for Dummies Made SimpleUpdate: XORSearch Version 1.6.0Unicode for dummies – just use UTF-8   [...]

  • http://basketman.wordpress.com/2010/06/11/%e0%b9%81%e0%b8%81%e0%b9%89%e0%b8%9b%e0%b8%b1%e0%b8%8d%e0%b8%ab%e0%b8%b2-character-class-preg_match-%e0%b8%81%e0%b8%b1%e0%b8%9a%e0%b8%a0%e0%b8%b2%e0%b8%a9%e0% แก้ปัญหา character class preg_match กับภาษาไทยที่ใช้ unicode « Basketman's Blog

    [...] http://sikachu.com/ Possibly related posts: (automatically generated)Unicode Beginners Introduction for Dummies Made [...]