Quy tắc bảo mật Firebase Biểu thức chính quy

Có thể sử dụng các ký tự biểu thức chính quy để xác thực các chuỗi do khách hàng cung cấp. Sử dụng string.matches(/pattern/) để kiểm tra xem chuỗi có tuân thủ mẫu biểu thức chính quy hay không. Cú pháp biểu thức chính quy không giống với cú pháp biểu thức chính quy thông thường, cụ thể:

  • * + . ( ) [ ] { } \ hoạt động bình thường.
  • Các neo ^$ chỉ hoạt động nếu chúng ta sử dụng chúng để khớp với ký tự đầu tiên hoặc cuối cùng trong mẫu.
  • chỉ hỗ trợ cờ sửa đổi i (bỏ qua trường hợp)

chữ

Một chữ biểu thức chính quy được đưa vào một biểu thức bảo mật bằng cách sử dụng ký hiệu /pattern/ . Để kiểm tra xem một chuỗi có tuân theo mẫu biểu thức chính quy hay không, hãy sử dụng hàm thành viên Match của chuỗi. Quy tắc so khớp sau đây kiểm tra xem dữ liệu mới có bắt đầu bằng chuỗi foo hay không.

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

Các tính năng được hỗ trợ

Firebase chỉ hỗ trợ một tập hợp con các tính năng biểu thức chính quy điển hình. Tuy nhiên, cú pháp biểu thức chính quy có vẻ quen thuộc.

Đây là những biểu tượng được hỗ trợ:

Tính cách Nghĩa
\s \w \d \S \W \D bộ ký tự được xác định trước để khớp khoảng trắng, ký tự từ hoặc chữ số và phủ định của chúng (tương ứng)
\ thoát, ký tự theo sau được hiểu theo nghĩa đen.
Nếu bạn muốn khớp trên chính "", hãy thoát nó /\/
^ neo vào đầu chuỗi. Điều này chỉ có thể được sử dụng làm chữ cái đầu tiên của mẫu.
/a/ khớp với "ba", trong khi /^a/ thì không.
$ neo vào cuối chuỗi. Điều này chỉ có thể được sử dụng làm chữ cái cuối cùng của mẫu.
/a/ khớp với "ab", trong khi /a$/ thì không.
* khớp với 0 hoặc nhiều mẫu trước đó.
/^a*$/ khớp với "" và "aaa", nhưng không khớp với "b"
+ khớp với một hoặc nhiều mẫu trước đó.
/^a+$/ khớp với "a" và "aaa", nhưng không khớp với ""
? khớp với 0 hoặc một trong các mẫu trước đó.
/^a?$/ khớp với "" và "a", nhưng không khớp với "aa"
. khớp với bất kỳ ký tự nào
/......../ khớp với "Firebase"
(pattern) dấu ngoặc đơn nhóm một mẫu thành một đơn vị
/(ab)*/ khớp với "abab"
a|b khớp với a hoặc b
/a|bc/ khớp với "ac" hoặc "bc"
[akz] một bộ ký tự, khớp với bất kỳ ký tự nào được bao gồm.
/[ABCDEF]/ chỉ khớp với các chữ cái viết hoa từ A đến F.
[az] một khoảng ký tự, khớp với tất cả các ký tự trong phạm vi được chỉ định.
/[0-9A-F]+/ khớp với chuỗi thập lục phân
[^0-9] Dấu ^ dẫn đầu phủ định bộ ký tự, khớp với bất kỳ thứ gì ngoài bộ ký tự được chỉ định.

Dấu i theo sau cấu trúc chữ biểu thức chính quy (ví dụ /yes/i ) cho biết kết quả khớp sẽ không phân biệt chữ hoa chữ thường. Các công cụ sửa đổi biểu thức chính quy khác không được hỗ trợ tại thời điểm này.

Đối sánh biểu thức chính quy trong Quy tắc bảo mật cơ sở dữ liệu thời gian thực Firebase không tham lam cũng như không tham lam vì nó chỉ cho phép bạn phát hiện kết quả khớp chứ không nắm bắt các phần của chuỗi.

Cách sử dụng

Yêu cầu chuỗi phải là ngày được định dạng là YYYY-MM-DD trong khoảng thời gian 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])$/)"

Yêu cầu chuỗi phải là địa chỉ email:

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

Yêu cầu chuỗi phải là URL cơ bản:

".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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"