Firebase 보안 규칙 정규 표현식

정규식 리터럴을 사용하여 클라이언트 제공 문자열의 유효성을 검사할 수 있습니다. 문자열이 정규식 패턴을 준수하는지 테스트하려면 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\\-\\.\\?\\,\\'\\/\\\\+&=%\\$#_]*)?$/)"