Just a Web Programmer Blog

แก้ปัญหา 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

Tags: ,

Related posts

Post a Comment

*
To prove that you're not a bot, enter this code
Anti-Spam Image