Regex 什么样的正则表达式可以测试字符串是否是有效的Firebase密钥?

Regex 什么样的正则表达式可以测试字符串是否是有效的Firebase密钥?,regex,firebase,Regex,Firebase,我正在编写一个应用程序,允许用户输入将作为密钥存储在Firebase中的值 Firebase关键要求: max size - 768 bytes cannot contain . $ # [ ] / or ASCII control characters 0-31 or 127 allows single spaces, but not double or more spaces 如何将其表示为正则表达式?假设1字节=1个字符,并且既然您提到了ASCII,那么假设有效字符是ASCII字符32到

我正在编写一个应用程序,允许用户输入将作为密钥存储在Firebase中的值

Firebase关键要求:

max size - 768 bytes
cannot contain . $ # [ ] / or ASCII control characters 0-31 or 127
allows single spaces, but not double or more spaces

如何将其表示为正则表达式?

假设1字节=1个字符,并且既然您提到了ASCII,那么假设有效字符是ASCII字符32到126

“匹配任何允许的字符,精确匹配768次:”

但是,当我替换中的完整字符集时

^( (?! )|[ !"%&'()*+\,\-\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghijklmnopqrstuvwxyz{|}](?!  )){1,768}$

# it breaks Regex101, saying it's too large.
^((?!)[!”%&'(*+\,\-\/0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^(?!){1768}$
#它破坏了Regex101,说它太大了。
注意:没有正则表达式要容易得多:

#Python示例验证程序
def验证:
有效字符='abc123…'

如果不是(0 因此,Firebase团队:

有两个例外:
.value
.priority
.info
是Firebase中的有效密钥,但仅用于访问特殊元数据,而不是作为记录id

旁注:我在文档中没有看到任何关于双空格的内容


我真的很感激你的回答。不幸的是,这还不太清楚。因为它应该接受<768的字符串,如果字符串超过768,regex.test(string)应该返回false。修复这两个问题很容易修改->^[…]{1768}$。唯一剩下的事情是使它可以接受“”(空格)而不是“”(双空格或更大的空格)。再次感谢您的帮助!噢,我错过了问题的主要部分,因为连续空格的数量有限。嗯……您可以将
{768}
设置为
{1768}
要覆盖1到768次,我没有理解对不起。正在使用的正则表达式是否支持前瞻性?这也是我要做的…请告诉我…如果你用0-9替换列表0123456789,用a-z和a-z替换,则不会中断。。。
# a space, not followed by a space
# or a character not followed by a double-space.
# This pattern, matched n times, locking the start and end of the string.

^( (?! )|[a](?!  )){5}$
^( (?! )|[ !"%&'()*+\,\-\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghijklmnopqrstuvwxyz{|}](?!  )){1,768}$

# it breaks Regex101, saying it's too large.
// in JavaScript
function isValidKey(text) {
   return typeof text === 'string' && 
      text.length &&
      !text.match(/[.$\[\]#\/]/);
}