如何在 Firebase 中设计正则表达式?

用户11628429

我不明白为什么我的正则表达式匹配在 Firebase 上用于验证用户名时不应该匹配的内容。

我试过阅读其他帖子,例如如何使用匹配项(正则表达式)验证用户名?但我仍然无法弄清楚我做错了什么。

我使用的正则表达式是:

/^\\S+(\\s\\S+)*$/

这是我在这里定义的规则的一部分:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null",
        ".write": "$uid === auth.uid",
        ".validate": "newData.hasChildren(['username'])",
        "username": {
          ".validate": "newData.isString() && newData.val().length > 0 && newData.val().length < 21 && newData.val().matches(/^\\S+(\\s\\S+)*$/)"
        }
      }
    }
  }
}

我希望能够匹配不以空格字符开头或结尾的字符串,并且没有任何连续的空格字符。

不包括引号,我希望"this is a username"匹配和" hello world"失败,但是当我使用 Firebase 上的模拟器测试它们时,它们都通过了。

Firebase 模拟器输出:

在此处输入图片说明

弗兰克·范·普费伦

我以前从未使用\S过,所以必须查找它的作用。但它似乎确实在这里引起了问题。我不知道为什么,但它似乎在我的快速测试中包含空格字符,尽管有趣的是,制表符与\S.

您可能想尝试使用\w,它对我有用并且非常相似。或者你可以用 反转\\s自己newData.val().matches(/^[^\\s].*$/),这相当于你正在尝试的。

在最后一个中,我替换(\\s\\S+)*了一个更简单的.*,它应该是等效的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章