gpt4 book ai didi

powershell - 在 If 条件下验证字符串不为空/null

转载 作者:行者123 更新时间:2023-12-04 07:30:06 27 4
gpt4 key购买 nike

我正在编写一个脚本,它将通过 Read-Host 接受用户输入(设置为 $String ),我想避免任何可能由变量的空白值引起的问题。因为我会经常使用它,所以我想将它实现为一个验证没有使用无效字符的函数。
我想我可以使用带有 ![string]::IsNullOrEmpty($String) 的 if 语句作为条件之一:

Function Test-ValidCharacters ($String, $ValidCharacters) {  
if (($String -match $ValidCharacters) -and (!([string]::IsNullOrEmpty($String)))) {
return $true
}
else {return $false}
}
我也试过这个:
Function Test-ValidCharacters ($String, $ValidCharacters) {  
if (($String -match $ValidCharacters) -and ($String -ceq "")) {
return $true
}
else {return $false}
}
在这两种情况下,当出现 $String 的 Read-Host 提示时,我只需按 Enter 键,脚本的行为就好像函数返回了 $True (然后后来遇到 fatal error )。另一半有效 - 如果我包含 $ValidCharacters 未指定的字符函数返回 $False正如预期的那样。
我确定我在这里遗漏了一些东西。我什至尝试做第二个嵌套 if 语句并得到相同的结果。
编辑:这是我调用函数并注意到问题的代码片段。
$ValidCharacters = '[^a-zA-Z0-9]'
$FirstN = Read-Host -Prompt "New user's first name"
While (Test-ValidCharacters $FirstN $ValidCharacters -eq $false) {
Write-Output "$FirstN contains illegal characters. A-Z, a-z, and 0-9 are accepted."
$FirstN = Read-Host -Prompt "New user's first name"
}

最佳答案

假设 $ValidCharacters本身不是空字符串,并且包含一个锚定字符范围正则表达式 (regular expression),它覆盖整个输入字符串,例如 ^[a-z0-9./:]+$ ,假设 -match operator默认情况下匹配任何子字符串(请注意,参数的更好名称因此类似于 $ValidationRegex ):[1]

  • 在第一个函数定义中,-and 的 RHS操作是多余的——它没有给条件添加任何内容,因为如果 $String -match $ValidCharacters$true , 那么 ! [string]::IsNullOrEmpty($String) ,根据定义。
  • 相反,在第二个函数定义中,您的 -and操作总是返回 $false , 因为 $String -ceq ""根据定义 $false , 如果 LHS 返回 $true .

  • 假设您的意图是防止空输入或全空格输入,并确保任何字符串(修剪掉附带的前导和/或尾随空格)仅由预期字符组成,请使用以下命令:
    Function Test-ValidCharacters ($String, $ValidCharacters) {
    # Note: no strict need for `return`.
    $String.Trim() -match $ValidCharacters
    }

    [1] 或者,坚持使用 $ValidCharacters并传递一个仅描述单个有效字符的正则表达式,例如 '[a-z0-9./:]' , 并使用 '^' + $ValidCharacters + '+$' 在函数内部构造整个字符串匹配的正则表达式

    关于powershell - 在 If 条件下验证字符串不为空/null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67994601/

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