Azure 容器名称 RegEx
本文关键字:RegEx Azure | 更新日期: 2023-09-27 18:32:40
如何使用正则表达式验证 Azure 容器名称?我从其他帖子中找到了以下代码行,但它没有验证连续的破折号 (-)。
if (!Regex.IsMatch(containerName, @"^[a-z0-9](([a-z0-9'-[^'-])){1,61}[a-z0-9]$"))
throw new Exception("Invalid container name);
例如,以下字符串在上述正则表达式模式下被认为是有效的:
test--test
规则是:
- 3 到 63 个字符;
- 以字母或数字开头;
- 包含字母、数字和短划线 (
-
); - 每个破折号(
-
)必须在紧跟字母或数字的前后
如果您按照自定义方法解决问题,则可以使用
^[a-z0-9](?!.*--)[a-z0-9-]{1,61}[a-z0-9]$
查看正则表达式演示
如果字符串中有 2 个连续的连字符,则(?!.*--)
前瞻将使匹配失败。
现在,说到Microsoft.WindowsAzure.Storage.NameValidator.ValidateContainerName(string containerName)
:代码只是重复上述正则表达式的逻辑,每个问题都有单独的参数例外。
private const int ContainerShareQueueTableMinLength = 3;
private const int ContainerShareQueueTableMaxLength = 63;
这两行设置容器名称的最小和最大长度,并在 private static void ValidateShareContainerQueueHelper(string resourceName, string resourceType)
方法中进行检查。那里使用的正则表达式是
private static readonly Regex ShareContainerQueueRegex =
new Regex("^[a-z0-9]+(-[a-z0-9]+)*$", NameValidator.RegexOptions);
因此,如果您向其添加长度限制,则只需要此模式:
^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$
^^^^^^^^^^^^
这个正则表达式是答案顶部的"同义词"。
如果需要不同的ArgumentException
来指示不同的问题,则应使用NameValidator
方法。否则,您可以使用您的单正则表达式解决方案。
我知道这不是你所要求的,但你可以使用存储在存储客户端库中的方法,而不是滚动你自己的正则表达式:Microsoft.Azure.Storage.NameValidator.ValidateContainerName(myContainerName)
如果名称无效,则此方法将引发ArgumentException
。 正如您从名称中猜到的那样,此静态类包含用于验证队列、表、blob、目录等名称的方法。
在Powershell中,你可以这样做:
function Test-ContainerNameValidity($ContainerName)
{
Import-Module -Name AzureRM
Write-Host "Testing container name against Microsoft's naming rules."
try {
[Microsoft.WindowsAzure.Storage.NameValidator]::ValidateContainerName($ContainerName)
Write-Host -ForegroundColor Green "Container name is valid!"
return
}
catch {
Write-Host -ForegroundColor Red "Invalid container name. Please check the container name rules: https://learn.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names"
Write-Host -ForegroundColor Red "The script is now exiting."
exit
}
}