規則運算式常值,可用於驗證用戶端提供的字串。使用 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 的英文字母
|
[a-z] |
字元間隔,會比對所有包含指定範圍中的字元。/[0-9A-F]+/
比對十六進位字串
|
[^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)"
要求字串必須為基本網址:
".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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"