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