정규식 리터럴을 사용하여 클라이언트 제공 문자열의 유효성을 검사할 수 있습니다. 문자열이 정규식 패턴을 준수하는지 테스트하려면 string.matches(/pattern/)
사용하세요. 정규식 구문은 특히 다음과 같은 일반 정규식 구문과 동일하지 않습니다.
-
*
+
.
(
)
[
]
{
}
\
정상적으로 작동합니다. -
^
및$
앵커는 패턴의 첫 번째 또는 마지막 문자와 일치하는 데 사용하는 경우에만 작동합니다. -
i
(대소문자 무시) 수정자 플래그만 지원됩니다.
리터럴
정규식 리터럴은 /pattern/
표기법을 사용하여 보안 식에 도입됩니다. 문자열이 정규식 패턴을 준수하는지 테스트하려면 string의 match 멤버 함수를 사용하세요. 다음 일치 규칙은 새 데이터가 문자열 foo로 시작하는지 확인합니다.
".validate": "newData.val().matches(/^foo/)"
지원되는 기능
Firebase는 일반적인 정규 표현식 기능의 하위 집합만 지원합니다. 그러나 정규식 구문은 친숙하게 느껴질 것입니다.
지원되는 기호는 다음과 같습니다.
성격 | 의미 |
---|---|
\s \w \d \S \W \D | 공백, 단어 문자 또는 숫자와 해당 부정을 일치시키기 위한 사전 정의된 문자 세트(각각) |
\ | 이스케이프하면 다음 문자가 문자 그대로 해석됩니다. "" 자체와 일치시키려면 ""도 이스케이프 처리하세요 /\/ |
^ | 문자열의 시작 부분에 고정합니다. 이는 패턴의 첫 글자로만 사용할 수 있습니다./a/ "ba"와 일치하지만 /^a/ 그렇지 않습니다. |
$ | 문자열 끝에 앵커를 고정합니다. 이는 패턴의 마지막 문자로만 사용할 수 있습니다./a/ "ab"와 일치하지만 /a$/ 그렇지 않습니다. |
* | 이전 패턴 중 0개 또는 여러 개와 일치합니다./^a*$/ "" 및 "aaa"와 일치하지만 "b"는 일치하지 않습니다. |
+ | 이전 패턴 중 하나 이상과 일치합니다./^a+$/ "a" 및 "aaa"와 일치하지만 ""는 일치하지 않습니다. |
? | 이전 패턴 중 0개 또는 1개와 일치합니다./^a?$/ "" 및 "a"와 일치하지만 "aa"는 일치하지 않습니다. |
. | 모든 문자와 일치/......../ 'Firebase'와 일치합니다. |
(pattern) | 괄호는 패턴을 단일 단위로 그룹화합니다./(ab)*/ "abab"와 일치합니다. |
a|b | a 또는 b와 일치/a|bc/ "ac" 또는 "bc"와 일치합니다. |
[akz] | 문자 세트는 포함된 모든 문자와 일치합니다./[ABCDEF]/ A에서 F까지의 대문자만 일치합니다. |
[az] | 문자 간격은 지정된 범위에 포함된 모든 문자와 일치합니다./[0-9A-F]+/ 16진수 문자열과 일치합니다. |
[^0-9] | 선행 ^ 지정된 문자 세트 이외의 모든 항목과 일치하는 문자 세트를 부정합니다. |
정규식 리터럴 구성 뒤에 오는 i
(예 /yes/i
)는 일치 시 대소문자를 구분하지 않음을 나타냅니다. 현재 다른 정규식 수정자는 지원되지 않습니다.
Firebase 실시간 데이터베이스 보안 규칙의 정규 표현식 일치는 일치 항목만 감지할 수 있고 문자열의 일부를 캡처할 수는 없으므로 탐욕적이지도 비탐욕적이지도 않습니다.
용법
문자열은 1900-2099 사이의 YYYY-MM-DD 형식의 날짜여야 합니다.
".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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"