【问题标题】:How can I test that a variable is more than eight characters in PowerShell?如何在 PowerShell 中测试变量是否超过八个字符?
【发布时间】:2013-04-28 11:31:57
【问题描述】:

如何测试$dbUserName 中的字符数是否超过8 个字符?

我无法找到可以让我执行此操作的命令或一系列命令。我只能找到变量是否为空:

if ($dbUserName) {
    Write-Output " You left Username blank"
    $dbUserName = read-host
}

但我想像这样进行下一次测试:

if ($dbUserName [String] > 8 ) }
    Write-Output " Please enter more than 8 characters "
    $dbUserName=read-host " Re-enter database user name"
}

【问题讨论】:

  • 奇怪,没有人理解这段代码中的逻辑。您正在检查用户名长度是否大于 8,如果为 True,则要求他们输入更多字符。因此,如果长度小于或等于 8,则将被接受。我认为应该是 -lt 或 -le...

标签: variables testing powershell


【解决方案1】:

使用[String] 类型的length 属性:

if ($dbUserName.length -gt 8) {
    Write-Output "Please enter more than 8 characters."
    $dbUserName = Read-Host "Re-enter database username"
}

请注意,您必须在 if 条件中使用 -gt 而不是 >。 PowerShell 使用以下比较运算符来比较值和测试条件:

  • -eq = 等于 (==)
  • -ne = 不等于 (!=)
  • -lt = 小于 (<)
  • -gt = 大于 (>)
  • -le = 小于或等于 (<=)
  • -ge = 大于或等于 (>=)

【讨论】:

  • > 是重定向运算符。我怀疑 -gt 可能是更好的选择。
  • @mjolinor 是的,没错。使用多种语言的危险。 :)
  • 这篇文章的逻辑仍然有缺陷。如果用户名的长度超过 8 个字符,则输出为:输入超过 8 个字符?应该是 -lt
  • $var.length 说我的字符串是 1 个字符,尽管它实际上接近 30。
【解决方案2】:

您还可以对正则表达式使用 -match。例如:

if ($dbUserName -match ".{8}" )
{
    Write-Output " Please enter more than 8 characters "
    $dbUserName=read-host " Re-enter database user name"
}

另外,如果你和我一样,并且喜欢你的花括号与你的代码块处于相同的水平位置,你可以把它放在一个新的行上,因为它期待一个代码块,它会在下一行显示。在第一个大括号必须与您的命令内联的某些命令中,您可以使用重音符号 (`) 告诉 powershell 将下一行视为续行。

【讨论】:

  • 对如此简单的任务使用正则表达式似乎会明显变慢。尽管在这么短的时间内,它可能甚至都不会引起注意。
  • 如果你想测试 8 或更少的正则表达式应该是 "^.{0,8}$"。但我同意@RaúlSalinas-Monteagudo 的观点,即这比字符串长度检查所需的速度(稍微)慢且不必要地复杂。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 2020-05-13
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多