根据'MM-DD-YYYY-HH-mm-ss'验证日期



我想强迫用户使用特定的日期字符串以在我的功能中使用。是否有一种手段可以与PowerShell中的ValidatePattern一起执行此操作。我已经尝试过,它似乎不起作用:

function Test-Date {
  Param(
    [ValidatePattern('MM-DD-YYYY-HH-mm-ss')]
    [DateTime]$date
  )
  Write-Output $date
}

好吧,我想我找到了自己问题的答案。我想验证我以特定方式从用户那里得到了约会,因此我可以告诉他们如何按照我的期望输入日期。我想要一般短期和短时间的日期格式,因此我将" G"用作我的模式。我在这里找到的其他模式

   function Test-Date
  {param(
    [ValidateScript(
    {
        try{[datetime]::ParseExact($psitem ,'g' ,[System.Globalization.CultureInfo](Get-Culture))}catch{throw "Datetime is in the wrong format ($_) Use this format 8/30/2007 11:20 AM"}
    })]
    [string]$date

  )
   Write-Output $date
  }

用于为参数值执行特定格式,我不建议在ValidateScript()块中解析该值并在不匹配上抛出异常。通过ValidatePattern()验证字符串,仅解析功能主体中的有效参数。

function Test-Date {
    Param(
        [ValidatePattern('^d{1,2}/d{1,2}/d{4} d{1,2}:d{2} [AP]M$')]
        [string]$date
    )
    $culture = [Globalization.CultureInfo]::InvariantCulture
    [DateTime]::ParseExact($date, 'g', $culture)
}

话虽如此,我希望函数Test-Date能够返回一个布尔值,以指示字符串是否为有效日期,因此我可能首先不会在Param()块中进行验证。我更喜欢这样的东西:

function Test-Date {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Date
    )
    $Date -match '^d{1,2}/d{1,2}/d{4} d{1,2}:d{2} [AP]M$'
}

或这样的话,如果您想成为文化 - 敏捷:

function Test-Date {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Date
    )
    $culture = Get-Culture
    try {
        [void][DateTime]::ParseExact($Date, 'g', $culture)
        $true
    } catch {
        $false
    }
}

最新更新