ใช้นิพจน์ทั่วไปในกฎความปลอดภัยของ Realtime Database

คุณสามารถใช้นิพจน์ทั่วไปแบบลิเทอรัลเพื่อตรวจสอบสตริงที่ลูกค้าให้มา ใช้ string.matches(/pattern/) เพื่อทดสอบว่าสตริงเป็นไปตามรูปแบบนิพจน์ทั่วไปหรือไม่ ไวยากรณ์นิพจน์ทั่วไปไม่เหมือนกับไวยากรณ์นิพจน์ทั่วไปที่ใช้กันโดยทั่วไป โดยเฉพาะอย่างยิ่งในส่วนต่อไปนี้

  • * + . ( ) [ ] { } \ ทำงานตามปกติ
  • ตัวยึด ^ และ $ จะทำงานก็ต่อเมื่อเราใช้เพื่อจับคู่อักขระแรกหรืออักขระสุดท้ายในรูปแบบ
  • รองรับเฉพาะแฟล็กตัวแก้ไข i (ไม่คำนึงถึงตัวพิมพ์ใหญ่/เล็ก)

ลิเทอรัล

คุณสามารถใส่นิพจน์ทั่วไปแบบลิเทอรัลลงในนิพจน์ความปลอดภัยได้โดยใช้สัญกรณ์ /pattern/ หากต้องการทดสอบว่าสตริงเป็นไปตามรูปแบบนิพจน์ทั่วไปหรือไม่ ให้ใช้ฟังก์ชันสมาชิก matches ของสตริง กฎการจับคู่ต่อไปนี้จะตรวจสอบว่าข้อมูลใหม่เริ่มต้นด้วยสตริง foo หรือไม่

".validate": "newData.val().matches(/^foo/)"

ฟีเจอร์ที่รองรับ

Firebase รองรับเฉพาะฟีเจอร์นิพจน์ทั่วไปบางส่วนเท่านั้น อย่างไรก็ตาม ไวยากรณ์นิพจน์ทั่วไปควรจะคุ้นเคย

สัญลักษณ์ที่รองรับมีดังนี้

ตัวละคร ความหมาย
\s \w \d \S \W \D ชุดอักขระที่กำหนดไว้ล่วงหน้าสำหรับการจับคู่การเว้นช่องว่าง อักขระคำ หรือตัวเลข และการปฏิเสธ (ตามลำดับ)
\ ยกเว้น อักขระที่ตามมาจะได้รับการตีความตามตัวอักษร
หากต้องการจับคู่ "" เอง ให้ยกเว้นด้วย /\/
^ ยึดกับจุดเริ่มต้นของสตริง โดยใช้เป็นอักขระแรกของรูปแบบได้เท่านั้น
/a/ จะจับคู่กับ "ba" แต่ /^a/ จะไม่จับคู่
$ ยึดกับจุดสิ้นสุดของสตริง โดยใช้เป็นอักขระสุดท้ายของรูปแบบได้เท่านั้น
/a/ จะจับคู่กับ "ab" แต่ /a$/ จะไม่จับคู่
* จับคู่รูปแบบก่อนหน้า 0 รายการขึ้นไป
/^a*$/ จะจับคู่กับ "" และ "aaa" แต่ไม่จับคู่กับ "b"
+ จับคู่รูปแบบก่อนหน้า 1 รายการขึ้นไป
/^a+$/ จะจับคู่กับ "a" และ "aaa" แต่ไม่จับคู่กับ ""
? จับคู่รูปแบบก่อนหน้า 0 หรือ 1 รายการ
/^a?$/ จะจับคู่กับ "" และ "a" แต่ไม่จับคู่กับ "aa"
. จับคู่อักขระใดก็ได้
/......../ จะจับคู่กับ "Firebase"
(pattern) วงเล็บจะจัดกลุ่มรูปแบบเป็นหน่วยเดียว
/(ab)*/ จะจับคู่กับ "abab"
a|b จับคู่ a หรือ b
/a|bc/ จะจับคู่กับ "ac" หรือ "bc"
[akz] ชุดอักขระ จะจับคู่อักขระใดก็ได้ที่รวมไว้
/[ABCDEF]/ จะจับคู่เฉพาะตัวอักษรพิมพ์ใหญ่ ตั้งแต่ A ถึง F
[a-z] ช่วงอักขระ จะจับคู่อักขระทั้งหมดรวมถึงอักขระในขอบเขตที่ระบุ
/[0-9A-F]+/ จะจับคู่สตริงเลขฐาน 16
[^0-9] ^ ที่นำหน้าจะปฏิเสธชุดอักขระ โดยจะจับคู่ทุกอย่างที่ไม่ใช่ชุดอักขระที่ระบุ

An i ที่ต่อท้ายโครงสร้างนิพจน์ทั่วไปแบบลิเทอรัล (เช่น /yes/i) จะระบุว่าการจับคู่จะไม่คำนึงถึงตัวพิมพ์ใหญ่/เล็ก ระบบยังไม่รองรับตัวแก้ไขนิพจน์ทั่วไปอื่นๆ ในขณะนี้

การจับคู่นิพจน์ทั่วไปในกฎการรักษาความปลอดภัยของฐานข้อมูลเรียลไทม์ของ Firebase จะไม่ละโมบหรือไม่ละโมบ เนื่องจากอนุญาตให้คุณตรวจหาการจับคู่เท่านั้น และไม่อนุญาตให้จับภาพบางส่วนของสตริง

การใช้งาน

กำหนดให้สตริงเป็นวันที่ในรูปแบบ YYYY-MM-DD ระหว่างปี 1900-2099

".validate": "newData.isString() && newData.val().matches(/^(19|20)[0-9][0-9][-\\/. ](0[1-9]|1[012])[-\\/. ](0[1-9]|[12][0-9]|3[01])$/)"

กำหนดให้สตริงเป็นอีเมล

".validate": "newData.isString() && newData.val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)"

กำหนดให้สตริงเป็น URL พื้นฐาน

".validate": "newData.isString() && newData.val().matches(/^(ht|f)tp(s?):\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*((0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"