powershell - 做...直到 - 使用 ValidPattern 读取主机
问题描述
我想创建一个检查特定日期格式的读取主机。此外,目标是检查用户的输入是否正确,如果不正确,则应再次弹出提示。
由于我是编程新手,我发现这段代码似乎很合适。我仍然在“直到”部分苦苦挣扎
do
{
try {
[ValidatePattern("yyyyMMdd")]$Date = Read-Host -Prompt "Please input a valid date in format YYYYMMDD!"
} catch {}
} until ($?)
Tbh,我不知道($?)应该做什么......我知道直到需要将用户输入与有效模式“yyyyMMdd”进行比较,但我不知道该怎么做。我尝试了一些组合但不成功...
解决方案
该[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
变量,确保如果失败我们再次循环。
推荐阅读
- php - 使用 ClearDB 在 Heroku 上部署 PHP Web App
- python - AttributeError:“工作表”对象在 openpyxl(python)中没有属性“get_highest_row”
- r - 将 tweenr 和 gganimate 与条形图一起使用
- javascript - WordPress TwentyFifteen SubMenu 使用与主菜单项关联的按钮时显示的子菜单项
- ionic4 - 如何在 Ionic 4 中为旧版 Android 发布 apk?
- git - 如何在“git push”之前删除敏感信息
- linux - 如何让 systemd 变量在重启后仍然存在?
- python - 如何将 python 代码转换为解析树并返回原始代码?
- python-3.x - macOS 上适用于 Python 3.7 的 Anaconda 2019.03 上的 Jupyter Notebook 中的内核错误
- google-apps-script - 脚本复制之前未保存 Google 表格数据