gpt4 book ai didi

PowerShell:如何检查为用户密码输入了多少位数字

转载 作者:行者123 更新时间:2023-12-04 16:37:08 25 4
gpt4 key购买 nike

我正在尝试编写一个 powershell 脚本,要求用户输入一个 4 位数的 PIN,如果该数字不等于 4,则会发出警告。

这是我所拥有的,但它似乎不起作用......

[int]$userPin = read-host 'type in your user pin'
if ($userPin.length -ne 4) {
write-host "Error, Pin must be 4 numbers"
}

无论如何,此代码都会写入错误消息...任何帮助表示赞赏!谢谢!

最佳答案

$userPin = while ($true) {
$entered = Read-Host 'type in your user pin'
if ($entered.Trim() -match '^\d{4}$') { [int] $entered; break }
Write-Warning "$entered is not a 4-digit number; please try again."
}

上面一直提示,直到输入一个 4 位数字,并将其作为 [int] 实例存储在变量 $userPin 中。

请注意 regex 首先使用匹配来确保刚好输入 4 个十进制数字 (\d{4})[1],使用 -匹配regular-expression matching operator .这样一来,预先排除了输入非数字的可能性,而不会导致将非数字的值直接转换为 [int] 时出现的错误。


至于你尝试了什么:

通过类型约束您的$userPin 变量来键入[int] ([int] $userPin = ... ),您将其值(初始值和以后分配的任何值)强制为该类型,并且 [int] ( System.Int32) 的实例没有 。 Length 属性(而从 Read-Host 返回的原始 [string] 实例有)。

默认情况下,PowerShell 会忽略访问不存在的属性的尝试并返回 $null,因此您的 $userPin.length -ne 4 条件等同于 $null -ne 4始终为真。


[1] 严格来说,\d 不仅匹配 ASCII 范围的十进制数字 09,还匹配其他Unicode 字符也归类为数字。要消除歧义,您可以改用 [0-9],尽管在​​实践中可能很少需要这样做。

关于PowerShell:如何检查为用户密码输入了多少位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68514343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com