ลิเทอรัลของนิพจน์ทั่วไปใช้เพื่อตรวจสอบสตริงที่ไคลเอ็นต์ระบุได้ ใช้ string.matches(/pattern/)
เพื่อทดสอบว่าสตริงเป็นไปตามรูปแบบนิพจน์ทั่วไปหรือไม่ ไวยากรณ์นิพจน์ทั่วไปไม่เหมือนกับไวยากรณ์นิพจน์ทั่วไปทั่วไป โดยเฉพาะ:
*
+
.
(
)
[
]
{
}
\
ทำงานได้ตามปกติ- แท็ก Anchor
^
และ$
จะใช้งานได้ก็ต่อเมื่อเราใช้จุดยึดเหล่านี้เพื่อจับคู่อักขระตัวแรกหรือตัวสุดท้ายในรูปแบบ - รองรับเฉพาะแฟล็กแป้นกดร่วม
i
(ไม่คำนึงถึงตัวพิมพ์ใหญ่/เล็ก) เท่านั้น
ลิเทอรัล
ลิงก์ของนิพจน์ทั่วไปจะมีอยู่ในนิพจน์ความปลอดภัยโดยใช้รูปแบบ /pattern/
หากต้องการทดสอบว่าสตริงเป็นไปตามรูปแบบนิพจน์ทั่วไปหรือไม่ ให้ใช้ฟังก์ชันจับคู่สมาชิกของสตริง กฎการจับคู่ต่อไปนี้จะตรวจสอบว่าข้อมูลใหม่ขึ้นต้นด้วย foo หรือไม่
".validate": "newData.val().matches(/^foo/)"
ฟีเจอร์ที่รองรับ
Firebase รองรับเฉพาะชุดย่อยของฟีเจอร์นิพจน์ทั่วไปทั่วไป แต่ไวยากรณ์นิพจน์ทั่วไปควรดูคุ้นเคย
สัญลักษณ์ที่รองรับมีดังนี้
ตัวละคร | ความหมาย |
---|---|
\s \w \d \S \W \D |
ชุดอักขระที่กำหนดไว้ล่วงหน้าสำหรับช่องว่างที่ตรงกัน อักขระที่เป็นคำ หรือตัวเลข และนิเสธ (ตามลำดับ) |
\ |
Escape อักขระต่อไปนี้จะถูกตีความอย่างตรงตัว หากต้องการจับคู่กับ "" ให้หลบเลี่ยงด้วย วันที่ /\/
|
^ |
Anchor ที่ส่วนต้นของสตริง สามารถใช้เป็นตัวอักษรแรกของรูปแบบเท่านั้น
/a/ ไม่จับคู่กับ "ba" ในขณะที่ /^a/ ไม่จับคู่กับ "ba"
|
$ |
Anchor ที่ส่วนท้ายของสตริง สามารถใช้เป็นตัวอักษรสุดท้ายของรูปแบบเท่านั้น /a/
ตรงกับ "ab" แต่ /a$/ จะไม่จับคู่กับ
|
* |
ตรงกับรูปแบบก่อนหน้าศูนย์รายการหรือหลายรายการ /^a*$/ ตรงกับ "" และ "aaa" แต่ไม่ใช่ "b"
|
+ |
ตรงกับรูปแบบก่อนหน้านี้อย่างน้อยหนึ่งรูปแบบ /^a+$/ ตรงกับ "a" และ "aaa" แต่ไม่ใช่ ""
|
? |
ตรงกับรูปแบบก่อนหน้าศูนย์หรือหนึ่งรูปแบบ /^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] |
^ ที่นำหน้าจะลบชุดอักขระ แต่จะจับคู่กับชุดอักขระอื่นๆ ที่ไม่ใช่ชุดอักขระที่ระบุ
|
i
ที่ต่อท้ายการสร้างลิเทอรัลของนิพจน์ทั่วไป (เช่น /yes/i
) บ่งบอกว่าการจับคู่จะไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ปัจจุบันระบบยังไม่รองรับตัวแก้ไขนิพจน์ทั่วไปอื่นๆ
การจับคู่นิพจน์ทั่วไปที่ตรงกันใน Firebase Realtime Database Security Rules ไม่ใช่แบบโล่งหรือไม่โล่ง เพราะจะช่วยให้คุณตรวจหาการจับคู่ที่ตรงกันเท่านั้น และจะไม่บันทึกบางส่วนของสตริง
การใช้งาน
สตริงต้องเป็นวันที่ในรูปแบบ 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"