首页 > 解决方案 > 做...直到 - 使用 ValidPattern 读取主机

问题描述

我想创建一个检查特定日期格式的读取主机。此外,目标是检查用户的输入是否正确,如果不正确,则应再次弹出提示。

由于我是编程新手,我发现这段代码似乎很合适。我仍然在“直到”部分苦苦挣扎

    do
{
    try {
    [ValidatePattern("yyyyMMdd")]$Date = Read-Host -Prompt "Please input a valid date in format YYYYMMDD!"
    } catch {}
} until ($?)

Tbh,我不知道($?)应该做什么......我知道直到需要将用户输入与有效模式“yyyyMMdd”进行比较,但我不知道该怎么做。我尝试了一些组合但不成功...

标签: powershell

解决方案


[ValidatePattern()]属性不适合您的验证例程。

它以正则表达式模式作为其参数,而正则表达式仅与文本有关 - 它对日期格式一无所知,并且yyyyMMdd对正则表达式引擎没有特殊意义 - 你基本上是在要求 powershell 验证输入是文字值 "yyyyMMdd"

你可能想用DateTime.TryParseExact()这个来代替:

$Date = [datetime]::MinValue
do
{
  $DateStringInput = Read-Host -Prompt "Please input a valid date in format YYYYMMDD!"
} until ([datetime]::TryParseExact($DateStringInput.Trim(), 'yyyyMMdd', $null, 'None', [ref]$Date))

在循环中,我们只是提示用户输入字符串,然后在until条件语句中,我们要求DateTime.TryParseExact()解析指定格式的输入并将其分配给$Date变量,确保如果失败我们再次循环。


推荐阅读