regex หรือ regular expression คือ การกำหนดรูปแบบหรือกลุ่มคำ เพื่อเอาไว้ใช้ค้นหาข้อความต่างๆตามที่เราต้องการ สามารถค้นหาได้ทั้งอักขระธรรมดา หรือค้นหาความข้อที่กำหนดไว้ หรือจะเป็นอักขระพิเศษก็สามารถค้นหาได้ รูปแบบหรือกลุ่มคำที่กำหนดไว้โดย regex อาจจะ match ได้แค่ 1 อัน
หรือ match ได้หลายๆอัน หรืออาจจะไม่ match เลยก็ได้
Regular Expressions มีอยู่เกือบทุกภาษา Programming แต่อาจจะแตกต่างกันออกไปเพียงนิดหน่อย

regex สามารถใช้เพื่อค้นหา, แก้ไข และจัดการข้อความได้
ถ้าใครยังนึกภาพไม่ออก ให้นึกถึงการใช้ Ctrl + F ที่เราใช้ในชีวิตประจำวันกันครับ เพราะนั่นคือการใช้หลักการ Regular Expressions อย่างหนึ่ง

Regular Expressions ใช้ตอนไหน ?

  • เวลาที่มีข้อมูลเยอะๆ แต่เราต้องการหาข้อมูลที่เฉพาะเจาะจง
  • ค้นหาคำที่มีความซับซ้อน เช่น ขึ้นต้น A ลงท้ายด้วย T หรือ หาเฉพาะตัวเลข เป็นต้น
  • คำที่ขึ้นต้นด้วยอะไรก็ได้ แต่ตรงกลางข้อความต้องมีเครื่องหมาย และลงท้ายตามที่กำหนด เช่น email เป็นต้น
  • ตรวจสอบรูปแบบของข้อความ เช่น รหัสนักศึกษา เลขบัตรประชาชน เป็นต้น

หัดเขียน Regular Expression : Regex Playground

  • regex101 : with code flavor and unit test 
  • regexr : with example text and tools 

Regex ที่ใช้งานบ่อยๆ : Commonly used Regex

Digits

Alphanumeric Characters

Email

Password Strength

  • Complex: Should have 1 lowercase letter, 1 uppercase letter, 1 number, 1 special character and be at least 8 characters long /(?=(.*[0-9]))(?=.*[\\!@#$%^&*()\\\\[\\]{}\\-_+=~`|:;"'<>,./?])(?=.*[a-z])(?=(.*[A-Z]))(?=(.*)).{8,}/
  • Moderate: Should have 1 lowercase letter, 1 uppercase letter, 1 number, and be at least 8 characters long /(?=(.*[0-9]))((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.{8,}$/

Username

  • Alphanumeric string that may include _ and – having a length of 3 to 16 characters –/^[a-z0-9_-]{3,16}$/

URL

  • Include http(s) Protocol /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#()?&//=]*)/
  • Protocol Optional /(https?:\\/\\/)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/

Dates

  • Date Format YYYY-MM-dd using separator “
  • Date Format dd-MM-YYYY using separators “ or . or /
  • Date Format dd-mmm-YYYY using separators “ or . or /
/* Date Format YYYY-MM-dd */
/([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]))/
 
/* Date Format dd-MM-YYYY or 
               dd.MM.YYYY or
               dd/MM/YYYY
   with check for leap year */
/^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/
 
/* Date Format dd-mmm-YYYY or
               dd/mmm/YYYY or
               dd.mmm.YYYY */
/^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)(?:0?2|(?:Feb))\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/
Code language: JavaScript (javascript)

Time

Phone Numbers

/* International Phone Numbers */
/^(?:(?:\\(?(?:00|\\+)([1-4]\\d\\d|[1-9]\\d?)\\)?)?[\\-\\.\\ \\\\\\/]?)?((?:\\(?\\d{1,}\\)?[\\-\\.\\ \\\\\\/]?){0,})(?:[\\-\\.\\ \\\\\\/]?(?:#|ext\\.?|extension|x)[\\-\\.\\ \\\\\\/]?(\\d+))?$/
Code language: PHP (php)

Note: Use regex for validating phone numbers only if you don’t have the choice to use a library. There are several libraries that handle phone numbers more accurately and should be used instead.

Identity Documents

  • Social Security Number – Ref
/* can use either hypen(-) or space( ) character as separator */
/^((?!219-09-9999|078-05-1120)(?!666|000|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0{4})\\d{4})|((?!219 09 9999|078 05 1120)(?!666|000|9\\d{2})\\d{3} (?!00)\\d{2} (?!0{4})\\d{4})|((?!219099999|078051120)(?!666|000|9\\d{2})\\d{3}(?!00)\\d{2}(?!0{4})\\d{4})$/

Code language: JavaScript (javascript)
  • Passport – /^[A-PR-WY][1-9]\\d\\s?\\d{4}[1-9]$/

Payment Validation

regex for validating leading Credit cards like Visa, Mastercard and so on.

^(?:4[0-9]{12}(?:[0-9]{3})?          # Visa
 |  (?:5[1-5][0-9]{2}                # MasterCard
     | 222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}
 |  3[47][0-9]{13}                   # American Express
 |  3(?:0[0-5]|[68][0-9])[0-9]{11}   # Diners Club
 |  6(?:011|5[0-9]{2})[0-9]{12}      # Discover
 |  (?:2131|1800|35\d{3})\d{11}      # JCB
)$Code language: PHP (php)
Tags:

Leave a Reply