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)
规则是:
-);-)必须立即在前面跟随一个字母或数字kni*_*hor 11
我知道这不完全是你问的,但是你可以使用内置在存储客户端库中的方法,而不是滚动你自己的正则表达式: Microsoft.Azure.Storage.NameValidator.ValidateContainerName(myContainerName)
如果名称无效,则此方法抛出一个ArgumentException.正如您从名称中猜到的那样,此静态类包含用于验证队列,表,blob,目录等名称的方法.
如果您按照自定义方式解决问题,则可以使用
^[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解决方案.