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

Có thể sử dụng giá trị cố định của biểu thức chính quy để xác thực các chuỗi do ứng dụng cung cấp. Sử dụng string.matches(/pattern/) để kiểm tra xem một 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 phổ biến, cụ thể là:

  • * + . ( ) [ ] { } \ hoạt động như bình thường.
  • Neo ^$ chỉ hoạt động nếu chúng ta 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 (không phân biệt chữ hoa chữ thường)

Giá trị cố định

Đưa giá trị cố định vào biểu thức chính quy vào biểu thức bảo mật bằng ký hiệu /pattern/. Để kiểm tra xem một chuỗi có tuân thủ mẫu biểu thức chính quy hay không, hãy sử dụng hàm thành phần kết hợp của chuỗi. Quy tắc so khớp sau đây sẽ 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/)"

Tính năng được hỗ trợ

Firebase chỉ hỗ trợ một số tính năng biểu thức chính quy điển hình. Tuy nhiên, bạn nên cảm thấy quen thuộc với cú pháp biểu thức chính quy.

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

Ký tự Ý nghĩa
\s \w \d \S \W \D các bộ ký tự được xác định trước để khớp khoảng trắng, một ký tự từ hoặc một chữ số và các phủ định của chúng (tương ứng)
\ Escape, ký tự theo sau được hiểu theo nghĩa đen.
Nếu bạn muốn so khớp trên "" , hãy thoát khỏi nó /\/
^ neo vào đầu chuỗi. Bạn chỉ có thể dùng tên này 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. Bạn chỉ có thể dùng tên này 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 phải là "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 phải là ""
? 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 phải là "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ẫu thành một đơn vị duy nhất
/(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ó trong đó.
/[ABCDEF]/ kết quả khớp chỉ được viết hoa các chữ cái từ A đến F.
[a-z] khoảng ký tự, khớp với tất cả các ký tự trong dải ô được chỉ định. /[0-9A-F]+/
khớp với chuỗi thập lục phân
[^0-9] ^ đứng đầu phủ định bộ ký tự, khớp với bất kỳ giá trị nào khác với bộ ký tự đã chỉ định.

i theo sau cấu trúc giá trị cố định của 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 đối tượng 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.

Việc so khớp biểu thức chính quy trong Firebase Realtime Database Security Rules không tham lam cũng không quá mức, vì phương thức này chỉ cho phép bạn phát hiện một kết quả trùng khớp chứ không thu thập 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 YYYY-MM-DD trong khoảng 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])$/)"

Chuỗi yêu cầu 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"