当前位置: 首页 > 知识库问答 >
问题:

用于用户输入验证的Azure blob存储正则表达式模式

闻人宜
2023-03-14

我在PowerShell(.NET Framework)中开发了一个函数,用于从任何给定的Azure Blob存储中检索数据:到目前为止,还不错。

不幸的是,当涉及到验证用户的输入时,我不能依赖外部模块或库,例如Azure SDK for .NET的NameValidator类。

然而,命名和引用容器、Blob和元数据这篇文章详细介绍了命名规则,因此regex模式可能会起到拯救作用。

对于容器名称,我想出了这个,它似乎适合:

(?=^.{3,63}$)(?!.*--)[^-][a-z0-9-]*[^-]

容器名称

容器名称必须是有效的DNS名称,符合以下命名规则:

  • 容器名称必须以字母或数字开头或结尾,并且只能包含字母、数字和破折号(-)
  • 每个破折号(-)字符必须紧跟字母或数字;容器名称中不允许使用连续破折号
  • 容器名称中的所有字母必须为小写
  • 容器名称的长度必须为3到63个字符

但是,对于 Blob 名称,我无法绕过路径段的计数:

(?=^.{1,1024}$)(?<=^|\/)(\S*?)[^\.] (?=\/|$)

注意:Azure存储模拟器已被弃用,因此超出了范围。

Blob名称

blob名称必须符合以下命名规则:

  • blob名称可以包含任意字符组合
  • 对于Azure存储中的blob,blob名称长度必须至少为一个字符,且不能超过1024个字符
  • Azure存储模拟器支持最多256个字符的blob名称。有关详细信息,请参阅使用Azure存储模拟器进行开发和测试
  • Blob名称区分大小写
  • 保留的URL字符必须正确转义
  • 包含blob名称的路径段数不能超过254。路径段是与虚拟目录名称相对应的连续分隔符字符(例如,正斜杠“/”)之间的字符串
  • 注意:避免以点(、、正斜杠(/)或序列或两者的组合结尾的blob名称。路径段不应以点(.)结尾

Blob服务基于平面存储方案,而不是分层方案。但是,您可以在blob名称中指定字符或字符串分隔符来创建虚拟层次结构。例如,下面的列表显示了有效和唯一的blob名称。请注意,字符串在同一容器中既可以作为blob名称也可以作为虚拟目录名称有效:

/a
/a.txt
/a/b
/a/b.txt

枚举blob时,可以利用分隔符字符。

NB:就在问这个问题之前,我发现了这个可以回答我已经自己解决的问题或使用前面提到的类:

Azure Container Name RegEx

如何验证Azure存储blob名称

顺便问一下,有人知道PowerShell使用的是哪种类型的正则表达式吗?

共有1个答案

薛承基
2023-03-14

您需要使用

^(?!.{1025})/?[^/]*[^/.](?:/[^/]*[^/.]){0,253}$
^(?=.{1,1024}$)/?[^/]*[^/.](?:/[^/]*[^/.]){0,253}$

请参阅正则表达式演示。

细节:

  • ^-字符串的开头
  • (?=.{11024}$)-字符串应包含1到1024个字符。
  • (?!.{1025})-字符串不能包含超过1025个字符。
  • / -可选的/
  • [^/]*[^/]-零个或多个字符而不是/,然后是一个字符而非/
  • (?:/[^/]*[^/]){0253}-零到253次出现的/之后是零个或多个字符,而不是/,然后是一个字符,不是
  • $-字符串结尾

 类似资料:
  • 问题内容: 我正在尝试创建一个正则表达式来根据以下条件验证用户名: 仅包含 字母数字 字符, 下划线 和 点 。 下划线和点号不能位于用户名(例如/ / / )的 末尾 或 开头 。 下划线和点不能 彼此相邻 (例如)。 下划线或点不能被多次使用 的行中 (例如,/ )。 字符数必须在8到20之间。 到目前为止,这是我所做的;听起来它强制执行 除了第5条规则以外的 所有标准规则。我不知道如何添加第

  • 问题内容: 我正在尝试使用以下规则在Java中使用用户名链: 长度> = 3 有效字符:az,AZ,0-9,点,破折号和下划线。 有人可以帮我提供正则表达式吗? 问题答案: 试试这个正则表达式:

  • 要求: 在我的角度应用程序中,用户密码应符合以下要求, < li >最少八个字符 < li >至少一个大写字母 < li >至少一个小写字母 < li >至少一个号码 < li >至少一个特殊字符 问题: 对于上述要求,我使用下面的正则表达式。 前任:1F4@sf5s6,18F4@sf5s6 问题: Q1:这个正则表达式不符合我的要求吗? Q2:如何解决这个问题? Q3:有没有其他方法来实现这个要

  • 问题内容: 谁能帮助我创建用于密码验证的正则表达式。 条件为“密码必须包含8个字符和至少一个数字,一个字母和一个唯一字符,例如 问题答案:

  • 我需要有关验证电话号码的正则表达式行的帮助,它如下所示: 这些是它验证的格式: 我想验证如下数字: +263 772 485 384 773456284 0773456284 大部分是国际号码

  • 我需要制作一个密码模式验证器 密码应具有: < li>1个大写字母 < li>1个小写字母 < li >一个号码 < li >最小长度为8。 我发现了这个正则表达式模式: 然而,验证器总是声称我的输入无效 根据 https://regex101.com/r/AfAdKp/1 此值应该是有效的。 编辑:澄清一下,Test1234应该可以工作