Azure容器名称RegEx

Muk*_*thi 7 regex azure-storage-blobs c#-4.0 asp.net-web-api-routing asp.net-web-api2

如何使用正则表达式验证Azure容器名称?我在其他帖子中找到了以下代码行,但它没有验证连续的破折号( - ).

if (!Regex.IsMatch(containerName, @"^[a-z0-9](([a-z0-9\-[^\-])){1,61}[a-z0-9]$"))
 throw new Exception("Invalid container name);
Run Code Online (Sandbox Code Playgroud)

例如,以下字符串被认为对上述正则表达式模式有效:

test--test 
Run Code Online (Sandbox Code Playgroud)

规则是:

  • 3到63个字符;
  • 以字母或数字开头;
  • 包含字母,数字和短划线(-);
  • 每个Dash(-)必须立即在前面跟随一个字母或数字

kni*_*hor 11

我知道这不完全是你问的,但是你可以使用内置在存储客户端库中的方法,而不是滚动你自己的正则表达式: Microsoft.Azure.Storage.NameValidator.ValidateContainerName(myContainerName)

如果名称无效,则此方法抛出一个ArgumentException.正如您从名称中猜到的那样,此静态类包含用于验证队列,表,blob,目录等名称的方法.


Wik*_*żew 7

如果您按照自定义方式解决问题,则可以使用

^[a-z0-9](?!.*--)[a-z0-9-]{1,61}[a-z0-9]$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

(?!.*--)如果有字符串中的连续2个连字符先行将无法匹配.

现在,谈到Microsoft.WindowsAzure.Storage.NameValidator.ValidateContainerName(string containerName):代码只是重复上面的正则表达式的逻辑,每个问题都有单独的参数异常.

private const int ContainerShareQueueTableMinLength = 3;
private const int ContainerShareQueueTableMaxLength = 63;
Run Code Online (Sandbox Code Playgroud)

这两行设置容器名称的最小和最大长度,并在private static void ValidateShareContainerQueueHelper(string resourceName, string resourceType)方法中进行检查.那里使用的正则表达式是

private static readonly Regex ShareContainerQueueRegex = 
    new Regex("^[a-z0-9]+(-[a-z0-9]+)*$", NameValidator.RegexOptions);
Run Code Online (Sandbox Code Playgroud)

因此,如果您向其添加长度限制,则只需要此模式:

^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$
 ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

这个正则表达式是答案顶部的正则表达式的"同义词".

NameValidator如果您需要不同的ArgumentExceptions来表示不同的问题,您应该使用该方法.否则,您可以使用one-regex解决方案.