我不明白为什么我的正则表达式匹配在 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] 删除。
我来说两句