คุณสามารถใช้นิพจน์ทั่วไปแบบลิเทอรัลเพื่อตรวจสอบสตริงที่ลูกค้าให้มา ใช้ 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"