Private/SKU/Test-SkuMatchesFilter.ps1

function Test-SkuMatchesFilter {
    <#
    .SYNOPSIS
        Tests if a SKU name matches any of the filter patterns.
    .DESCRIPTION
        Supports exact matches and wildcard patterns (e.g., Standard_D*_v5).
        Case-insensitive matching. Uses -like operator to eliminate ReDoS risk.
        Validates patterns via length limit and character whitelist before matching.
    #>

    param([string]$SkuName, [string[]]$FilterPatterns)

    if (-not $FilterPatterns -or $FilterPatterns.Count -eq 0) {
        return $true  # No filter = include all
    }

    foreach ($pattern in @($FilterPatterns)) {
        if ([string]::IsNullOrWhiteSpace($pattern)) { continue }
        if ($pattern.Length -gt 128) {
            Write-Warning "SKU filter pattern too long (>128 chars), skipping: $($pattern.Substring(0,50))..."
            continue
        }
        if ($pattern -notmatch '^[A-Za-z0-9_\-\*\?]+$') {
            Write-Warning "SKU filter pattern contains invalid characters, skipping: $pattern"
            continue
        }
        if ($SkuName -like $pattern) {
            return $true
        }
    }

    return $false
}