วันนี้พยายามลองเขียน regular expression เพื่อหาว่าตัวอักษรที่รับมาเป็นภาษาไทย และ ไม่ใช่สระลองเขียนๆ ดู ใช้ preg_match แล้วก็ character class ระหว่าง ก-ฮ ปรากฎว่าเจอเหตุการณ์ไม่คาดฝัน ..

echo preg_match("/^[ก-ฮ]$/", "ก"); // => 1
echo preg_match("/^[ก-ฮ]$/", "เ"); // => 1

ห๊ะ – -!ปรากฎว่า ลองดูไปดูมามันเป็นเพราะว่า ถ้าเราใช้ character class เนี่ย มันจะทำการเช็คแค่ byte แรกเท่านั้นแล้วภาษาไทยใน unicode มันใช้ทั้งหมด 3 bytes ..ดังนั้น มันจึงเช็คแค่ byte แรกแล้วก็บอกว่าข้อความนั้น match กันเลยทันที ..เพราะฉะนั้น วิธีการแก้ก็ง่ายๆ แค่กำหนดขนาดลงไป ..

echo preg_match("/^[ก-ฮ]{3}$/", "ก"); // => 1
echo preg_match("/^[ก-ฮ]{3}$/", "เ"); // => 0

แค่นี้ก็เรียบร้อย
http://sikachu.com/