Regular expression กับภาษาไทย
วันศุกร์กำลังนั่งทำงานอยู่ แล้วก็คิดไปคิดมาว่าสิ่งที่ต้องทำคือการตรวจสอบว่า ข้อความที่ส่งเข้ามานี่มีตัวอักษรประหลาดพวก *^#$… อะไรพวกนี้อยู่หรือป่าว ปกติก็ลองกับภาษาอังกฤษธรรมดา เวลาใช้ regular expression ตรวจก็จะมีรูปแบบประมาณว่า
\w
ซึ่งเหมือนกันทุกภาษา แต่พอใช้ภาษาไทยปรากฏว่ามันตรวจสอบโดยใช้รูปแบบด้านบนไม่ได้นี่สิ เลยต้องขุดเพิ่มเติมนิดหน่อยแล้วก็เจอตัวนี้เข้า
\p{...}
รูปแบบนี้เป็นตัวบอกว่าจะใช้กลุ่มรูปแบบที่เกี่ยวกับ unicode นะ คราวนี้ถ้าต้องการตรวจสอบภาษาไทยก็ใส่เป็น
\p{L}
แต่ปัญหามันไม่จบแค่นั้น ถ้าใส่แค่ L มันจะเอาเฉพาะที่เป็นพยัญชนะ พวก สระ และ วรรณยุกต์ ถ้าเจอมันจะบอกว่าผิดรูปแบบทันที แต่คำภาษาไทยมันรวมพวกนั้นเข้าไปด้วยหนะสิ ก็เลยต้องแก้รูปแบบอีกทีเป็น
[\p{L}\p{M}]
โดย M ที่ใส่มาก็เพื่อบอกว่าเอา สระ และ วรรณยุกต์ด้วยนั่นเอง สำหรับรายละเอียดเพิ่มเติมอ่านได้จากเว็บนี้ http://unicode.org/unicode/reports/tr18/ จะมีพวกตัวอักษรตัวเล็ก ตัวใหญ่ … อีกมากมายในภาษาอื่นๆ ด้วยลองไปดูเอาละกันครับ
นอกเรื่อง: ส่วนนี้พูดถึง serialize ของจาวาหน่อย เพราะวันศุกร์ไปปล่อยความงี่เง่าส่วนตัวใส่เพื่อนแหะๆ ปกติเวลา serialize วัตถุอะไรในจาวาก็จะให้คลาสของ วัตถุนั้น implements Serializable แต่ถ้าเกิด คลาสนั้น สืบทอด ต่อมาจากคลาสอื่นที่ไม่ serialize หละ ตัวแปรในคลาสอื่นที่ต้องเก็บไปด้วยจะเกิดอะไรขึ้น ลองดูตัวอย่างจากโค้ดด้านล่างดู
class Vehicle {
protected int speed;
... another abstract method
}
class Car extends Vehicle implements Serializable {
private int doors;
... setter/getter method
}
public class Main {
public static void main(String... args) throws Exception {
Car car = new Car();
car.setSpeed(100);
car.setDoor(2);
... another car method
FileOutputStream fos = new FileOutputStream("object.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(car);
oos.close();
fos.close();
Car car2;
FileInputStream fis = new FileInputStream("object.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
car2 = ois.readObject();
ois.close();
fis.close();
System.out.println(car2.getSpeed()); // Null pointer exception? หรือ 0
System.out.println(car2.getDoor());
...
}
}
- HashSet ใน Java
- Java Generic
- Multiaction Simple Form ใน Spring
- Enum Factory
- Immutable pattern and string




Add Yours
YOU