Firestore安全规则中Regex匹配邮箱失败及语法报错求助
Firestore安全规则中邮箱正则匹配的合规解决方案
问题根源
直接使用带斜杠包裹的正则表达式(如/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i)会导致匹配失败,手动转义\.后触发语法错误,核心原因是Firestore安全规则的matches()方法对正则的语法要求和常规JS正则不同:
- 不需要用
/包裹正则表达式,斜杠会被当作正则的一部分参与匹配 - 大小写忽略等修饰符不能写在正则末尾,需通过方法的第二个参数传入
- 规则字符串中的反斜杠需要双重转义(
\\.)才能表示正则里的字面量.
正确写法
将正则以纯字符串形式传入matches(),并把修饰符作为第二个参数传递:
return request.resource.data.email.matches('^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$', 'i');
验证说明
该规则可正确匹配test@gmail.com等标准格式邮箱,同时不会触发语法错误,完全符合Firestore安全规则的语法要求。
内容的提问来源于stack exchange,提问作者Jesse Yentsch
相关产品推荐
相关产品推荐

