การใช้นิพจน์ปรกติ (Regular Expression)
From LimeSurvey Manual
นิพจน์ปรกติต้องขึ้นต้นและลงท้ายด้วยเครื่องหมายทับ ("/") คุณสามารถค้นหานิพจน์ปรกติดี ๆ ได้จากคลังที่ https://www.regexlib.net/ รูปแบบเหล่านี้เกือบทั้งหมดจะใช้งานได้ หากครอบด้วยเครื่องหมายทับ
หากต้องการทดสอบ regex ของคุณ สามารถ ใช้เครื่องมือทดสอบ regex นี้ ได้
สำคัญ: นิพจน์ปรกติในเงื่อนไข
โปรดทราบว่าเมื่อใช้นิพจน์ปรกติในตัวแก้ไขเงื่อนไข อย่าใส่เครื่องหมายทับที่ขึ้นต้นและลงท้าย
การตรวจสอบอีเมล
อัปเดต (12/2018): ปัจจุบันชื่อโดเมนสามารถมีอักขระพิเศษ เช่น “ü” และยังใช้ชื่อโดเมนที่ยาวกว่า 3 อักขระได้ เช่น .tech หรือ .company ดังนั้น regex อีเมลด้านล่างจึงตรวจสอบเพียงว่ามี “@” และ “.” อยู่ในที่อยู่อีเมลที่กรอกหรือไม่
/^.+?@.+?\..+$/
หากต้องการตรวจสอบที่อยู่หนึ่งรายการต่อบรรทัด ในช่องข้อความยาวแบบหลายบรรทัด:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
regex ที่ล้าสมัยนี้จำกัดชื่อโดเมนไว้ที่ 3 อักขระ ซึ่งไม่ครอบคลุมโดเมนทั้งหมดที่มีอยู่:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
รหัสไปรษณีย์
รหัสไปรษณีย์ออสเตรเลีย:
/^[0-9]{4}/
รหัสไปรษณีย์บราซิล
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
รหัสไปรษณีย์แคนาดา
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
รหัสไปรษณีย์สหรัฐอเมริกา
/^[0-9]{5}([- /]?[0-9]{4})?$/
หากต้องการให้รหัสไปรษณีย์ขึ้นต้นด้วยศูนย์ ให้ใช้:
/^[0-9]{5}(?:-[0-9]{4})?$/
รหัสไปรษณีย์สหราชอาณาจักร
/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
โปรดทราบว่านิพจน์นี้ไม่แม่นยำนัก และการตรวจสอบที่แม่นยำกว่านี้ซับซ้อนกว่ามาก ตัวอย่างเช่น ดูข้อมูลเพิ่มเติมได้จาก StackOverflow answer และ Wikipedia
รหัสไปรษณีย์ฝรั่งเศส
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/
นิพจน์ข้างต้นแม่นยำมาก และจะตรวจสอบว่ามีแผนก (Department) ของฝรั่งเศสนั้นอยู่จริงหรือไม่ (สองหลักแรก) รวมถึงแผนกและดินแดนโพ้นทะเล (DOM-TOM)
หมายเลขโทรศัพท์
หมายเลขโทรศัพท์สหรัฐอเมริกา
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
หรือ
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
ตัวเลือกที่สองนี้จะจับคู่หมายเลขโทรศัพท์ของแคนาดาและสหรัฐอเมริกาทั้งหมดที่มีสัญลักษณ์ที่ไม่ใช่ตัวเลข ซึ่งรวมถึง:
. ( ) - (space)
ซึ่งจะช่วยให้คุณจับคู่หมายเลขโทรศัพท์ที่มีลักษณะดังต่อไปนี้:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
หมายเลขโทรศัพท์ออสเตรเลีย
รูปแบบต่อไปนี้จับคู่หมายเลขโทรศัพท์มือถือและโทรศัพท์บ้านของออสเตรเลียทุกแบบ รวมถึงแบบที่มีคำนำหน้ารหัสประเทศ "+61":
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
แต่ไม่ตรงกับ:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
เครื่องหมายวงเล็บ ช่องว่าง และเครื่องหมายยัติภังค์จะถูกละเว้น
เวอร์ชัน 'แม่นยำมาก:' ที่แสดงไว้ที่นี่จะตรวจสอบตัวเลขสี่หรือห้าหลักแรกของหมายเลข เพื่อให้แน่ใจว่าเป็นหมายเลขของออสเตรเลียที่ถูกต้อง
เวอร์ชัน 'แม่นยำไม่มาก:' จะตรวจสอบเฉพาะหลักแรกและหลักที่สองเท่านั้น จึงอาจยอมรับหมายเลขที่ไม่ถูกต้อง
หมายเลขโทรศัพท์ทั้งหมดของออสเตรเลีย (มือถือและโทรศัพท์บ้าน - ต้องระบุรหัสพื้นที่)
แม่นยำมาก:
/^\(?(?:\+?61|0)(?:(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}|4\)?[ -]?(?:(?:[01][ -]?[0-9]|2[ -]?[0-57-9]|3[ -]?[1-9]|4[ -]?[7-9]|5[ -]?[018])[ -]?[0-9]|3[ -]?0[ -]?[0-5])(?:[ -]?[0-9]){5})$/
แม่นยำไม่มาก:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
หมายเลขโทรศัพท์ทั้งหมดของออสเตรเลีย (เฉพาะโทรศัพท์บ้าน - ต้องระบุรหัสพื้นที่)
แม่นยำมาก:
/^\(?(?:\+?61|0)(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}$/
แม่นยำไม่มาก:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
หมายเลขโทรศัพท์บ้านในนิวเซาท์เวลส์ (ไม่จำเป็นต้องระบุรหัสพื้นที่)
แม่นยำมาก:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
แม่นยำไม่มาก:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
หมายเลขโทรศัพท์บ้านในวิกตอเรียและแทสเมเนีย (ไม่จำเป็นต้องระบุรหัสพื้นที่)
แม่นยำมาก:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
แม่นยำไม่มาก:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
หมายเลขโทรศัพท์บ้านในควีนส์แลนด์ (ไม่จำเป็นต้องระบุรหัสพื้นที่)
แม่นยำมาก:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
แม่นยำไม่มาก:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
หมายเลขโทรศัพท์บ้านในเซาท์ออสเตรเลีย นอร์เทิร์นเทร์ริทอรี และเวสเทิร์นออสเตรเลีย (ไม่จำเป็นต้องระบุรหัสพื้นที่)
แม่นยำมาก:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/
แม่นยำไม่มาก:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
หมายเลขโทรศัพท์มือถือของออสเตรเลียเท่านั้น
แม่นยำมาก:
/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/
แม่นยำไม่มาก:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
หมายเลขโทรศัพท์ของเบลเยียม
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/
หมายเลขโทรศัพท์มือถือของเบลเยียม
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
หมายเลขโทรศัพท์ของฝรั่งเศส
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
หมายเลขโทรศัพท์มือถือของฝรั่งเศส
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
หมายเลขโทรศัพท์ของลักเซมเบิร์ก
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
หมายเลขโทรศัพท์มือถือของลักเซมเบิร์ก
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
เกรดของเยอรมนี (มีเครื่องหมายบวกหรือลบได้ตามต้องการ)
/^[1-6]{1}[\+|\-]?$/
การตรวจสอบอายุ
ตัวอย่าง: อายุ 20-99 ปี
/([2-9][0-9])/
ตัวอย่าง: อายุ 18-35 ปี
/(1[8-9]|2[0-9]|3[0-5])/
ตัวอย่าง: อายุ 19-65 ปี
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
การตรวจสอบตัวเลข
ตัวเลขตั้งแต่ 1 ถึง 99999
/^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])$/
/^[1-9][0-9]{0,4}$/ does the same as above but should run a little faster
ตัวเลขตั้งแต่ 1 ถึง 999, 1.000 ถึง 999.999 ถึง 999.999.999
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
ยอมรับตัวเลขตั้งแต่ 1 ถึง 999, 1.000 ถึง 999.999 ถึง 999.999.999 แต่ ไม่ยอมรับตัวเลข เช่น 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333
การตรวจสอบตัวเลขพร้อมทศนิยมแบบไม่บังคับ (สำหรับราคา)
รับตัวเลขตั้งแต่ 0 ถึง 199 โดยทศนิยม 2 ตำแหน่งเป็นตัวเลือก:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/
การตรวจสอบตัวเลขพร้อมตัวคั่นหลักพัน
ใช้ช่องว่างเป็นตัวคั่น ไม่รับเครื่องหมายลบ
/^(?!0)\d{1,3}(\ \d{3})*$/
ใช้จุดเป็นตัวคั่น รับเครื่องหมายลบได้
/^-?(?!0)\d{1,3}(\.\d{3})*$/
นิพจน์นี้บังคับให้มีทศนิยมสองตำแหน่ง และรับตัวเลขตั้งแต่ 1.00 ถึง 999,999,999.00 โดยจะมีเครื่องหมายจุลภาคคั่นหลักพัน/หลักล้านหรือไม่ก็ได้ รวมถึงตัวเลขทั้งหมดต่อไปนี้: 1.00, 1,000.00, 12,345.67, 12345,02, 123,456,468.00, 1234566.00, 123456789.00 แต่ไม่รับ 1,23.00, 12,3.4 หรือ 1234,43.04
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
คล้ายกับด้านบน: บังคับให้มีทศนิยมสองตำแหน่ง แต่รับ "0" ก่อนตัวคั่นทศนิยม ","
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
เหมือนด้านบน แต่ทศนิยมสองตำแหน่งเป็นตัวเลือก:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/
เดือน (1-12)
หากต้องการถามเดือนเกิดของบุคคล คุณสามารถตรวจสอบข้อมูลที่กรอกได้ดังนี้:
/^[0]*[1-9]$|^[0]*1[0-2]$/
ความกว้างขั้นต่ำ (ตั้งเป็น 3 ในตัวอย่างนี้)
/^.{3,}$/
สกุลเงิน
สกุลเงินดอลลาร์สหรัฐ (เครื่องหมายดอลลาร์และเซนต์เป็นตัวเลือก)
/^\$?\d+(\.(\d{2}))?$/
ตรวจสอบการใช้เครื่องหมายจุลภาค:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
ราคาแบบสวิส
ตัวเลขที่มีทศนิยมสองตำแหน่งหลังจุดทศนิยม โดยตำแหน่งสุดท้ายต้องเป็น 5 หรือ 0:
/^(\d+)(\.\d(05)?)?$/
การตรวจสอบคะแนน
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
การตรวจสอบข้อความ
ประเภทคำถามข้อความสั้นหลายรายการยังไม่รองรับการกำหนดจำนวนคำตอบขั้นต่ำหรือสูงสุดในขณะนี้ วิธีหนึ่งในการแก้ปัญหาคือใช้ประเภทคำถามข้อความแบบยาวร่วมกับนิพจน์ปรกติ
นิพจน์ด้านล่างตรวจสอบว่ามีอย่างน้อยหนึ่งคำต่อบรรทัด ตั้งแต่ 3 บรรทัดขึ้นไปแต่ไม่เกิน 10 บรรทัด:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is
หากต้องการให้มี เช่น ห้าคำต่อบรรทัด คุณสามารถเปลี่ยนเครื่องหมายดอกจันตัวแรกและตัวสุดท้ายเป็น {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is
หากต้องการให้มีหนึ่งคำขึ้นไปต่อบรรทัด (ระหว่างบรรทัดที่ 1 ถึงบรรทัดที่ 5) คุณสามารถเปลี่ยนค่าในวงเล็บปีกกาตัวสุดท้ายเป็น 0,4 (โปรดทราบว่าใช้ 0 เพราะบรรทัดแรกถูกจับคู่ไปแล้ว)
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
จำนวนคำ
นิพจน์ต่อไปนี้จำกัดจำนวนคำที่อนุญาตให้มีขั้นต่ำ 1 คำและสูงสุด 200 คำ:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
หากต้องการเพิ่มค่าขั้นต่ำ ให้เปลี่ยนส่วนที่เป็นศูนย์ใน {0,199}
หากต้องการเพิ่มหรือลดค่าสูงสุด ให้เปลี่ยนส่วน "199" ใน {0,199}
การตรวจสอบเวลา
รูปแบบเวลามีหลายวิธีในการเขียน ตัวเลือกที่เป็นไปได้เช่น แบบ 12 ชั่วโมงหรือ 24 ชั่วโมง แบบมีวินาทีหรือไม่มีวินาที แม้ว่าจะสามารถใช้ประเภทคำถามวันที่ได้ (ซึ่งสามารถเก็บเวลาได้เช่นกัน) แต่คุณสามารถใช้ประเภทคำถามข้อความแบบสั้นร่วมกับนิพจน์ปรกติสำหรับการตรวจสอบอย่างใดอย่างหนึ่งด้านล่างนี้ได้
สตริงสำหรับการตรวจสอบสามรายการต่อไปนี้ใช้ตรวจสอบเวลาแบบ 24 ชั่วโมง (ตามลำดับ) โดยแบบแรกไม่มีวินาที แบบที่สองมีวินาทีเป็นตัวเลือก และแบบสุดท้ายต้องมีวินาที:
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/
สามรายการต่อไปนี้ใช้จับคู่เวลาแบบ 12 ชั่วโมง เช่นเดียวกับด้านบน คือแบบมีวินาที แบบมีวินาทีเป็นตัวเลือก และแบบต้องมีวินาที:
/^(?">00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))$/
/^(?:00:[0-5][0-9](?::[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?::[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?::[0-5][0-9])? (?:pm|PM))$/
/^(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))$/
สามรายการต่อไปนี้ใช้จับคู่เวลาแบบ 12 หรือ 24 ชั่วโมง เช่นเดียวกับด้านบน คือแบบมีวินาที แบบมีวินาทีเป็นตัวเลือก และแบบต้องมีวินาที:
/^(?:(?:00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9])$/
/^(?:(?:00:[0-5][0-9](?[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9](?[0-5][0-9])?)$/
/^(?:(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])$/
รัฐของสหรัฐอเมริกา
หากต้องการตรวจสอบรัฐเดียว ให้ใช้รูปแบบต่อไปนี้ (ตัวอย่างคือรัฐเท็กซัส):
- TX ตัวพิมพ์ใหญ่เท่านั้น:
/^(TX)$/
- tx ตัวพิมพ์เล็กเท่านั้น:
/^(tx)$/
- TX ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก:
/^([T|t][X|x])$/
ตัวกรองคำหยาบ
วิธีกรองคำหยาบออกจากคำตอบ:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
แทนที่ "ENTERPROFANITYHERE" ด้วยคำหยาบที่คุณต้องการกรอง
\b จะอนุญาตให้คำเช่น "assassination" และ "สวัสดี" (hello) ผ่านได้ หากคุณระบุ "ass" หรือ "hell" เป็นคำหยาบ วิธีนี้ยังใช้ได้เมื่อคุณต้องการตัดคำอื่น ชื่อ ฯลฯ ออกจากคำตอบด้วย
ลิงก์ที่เป็นประโยชน์
ในช่วงต้นของส่วนวิกินี้ เราแนะนำให้คุณใช้ https://regex101.com/ เพื่อทดสอบ/สร้าง regular expression นอกจากนี้ คุณยังสามารถใช้ https://www.regextester.com/ เพื่อสร้างนิพจน์ได้ หากคุณไม่พอใจกับตัวเลือกแรก และคุณสามารถใช้ https://extendsclass.com/regex-tester.html เพื่อแสดง regular expression ในรูปแบบภาพได้