【发布时间】:2018-05-28 18:04:49
【问题描述】:
我正在尝试使用以下正则表达式验证生日:
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
这个正则表达式在在线正则表达式测试器中测试时有效,但是当我尝试在我的 Firebase 规则中使用这个正则表达式时,Firebase 似乎不接受它。我还尝试将反斜杠加倍,但仍然没有运气。
这是我的 Firebase 规则:
".validate": "newData.isString() && newData.val().matches(/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/)"
这是我在 Firebase 上遇到的错误:“非法正则表达式,未转义的 ^,^ 只能出现在正则表达式的末尾”
如何调整此正则表达式以使其在 Firebase 上运行?
【问题讨论】:
-
我尝试将反斜杠加倍,但仍然没有成功。
-
我仍然收到完全相同的错误:(
-
抱歉,我忘了删除一个
^。见regex101.com/r/3pJKH8/2。关键是你不能在模式内重复^和$,^和$只允许在开头(^)和结尾($)出现一次 -
这个表达式被firebase接受,没有错误,但是当我尝试传递生日时,正则表达式拒绝它。
-
它应该可以工作,请参阅this demo。您是否将其作为字符串传递?
标签: regex firebase firebase-realtime-database firebase-security