您的版本失败的原因是您while
从源代码更改了测试的基本结构。.StartsWith()
另外,您忽略了和.EndsWith()
都区分大小写的事实。最后一个意思是domain
和Domain
不是一回事。[咧嘴笑]
我没有解开这个问题,而是以一种对我来说似乎更明显的方式重写了这个想法。
它能做什么 ...
- 创建常量
- 创建测试字符串
的正则表达式转义版本,以斜杠结尾的版本如果不转义将无法工作,因为这是一个保留字符。由于点是正则表达式模式语言中的“任何字符”,因此以结尾的那个.com
不会总是工作而不转义。
- 将输入变量设置为空字符串
- 开始一个
while
循环
- 测试一个
null or empty
字符串
- 获取用户输入
if
测试域 id
elseif
测试电子邮件地址
else
写入警告并将输入 $Var 设置为空白字符串
- while循环退出后,显示
$RHInput
变量 的内容
编码 ...
$DomainName = 'Ziggity'
$EmailSuffix = '@{0}.com' -f $DomainName
$ES_Regex = [regex]::Escape($EmailSuffix)
$UserNamePrefix = '{0}\' -f $DomainName
$UNP_Regex = [regex]::Escape($UserNamePrefix)
$RHInput = ''
while ([string]::IsNullOrEmpty($RHInput))
{
$RHInput = Read-Host ('Enter an ID [ UserName@{0} or {1}UserName ] ' -f $EmailSuffix, $UserNamePrefix)
if ($RHInput -match "^$UNP_Regex")
{
'You entered a domain ID [ {0} ]' -f $RHInput
}
elseif ($RHInput -match "$ES_Regex$")
{
'You entered an email address [ {0} ]' -f $RHInput
}
else
{
Write-Warning ( '[ {0} ] is not a valid email address OR a valid domain ID.' -f $RHInput)
$RHInput = ''
}
}
''
$RHInput
在while
... 中输出
# 1st run thru
Enter an ID [ UserName@@Ziggity.com or Ziggity\UserName ] : testing@ziggity.com
You entered an email address [ testing@ziggity.com ]
# 2nd run thru
Enter an ID [ UserName@@Ziggity.com or Ziggity\UserName ] : testing\tutu
WARNING: [ testing\tutu ] is not a valid email address OR a valid domain ID.
Enter an ID [ UserName@@Ziggity.com or Ziggity\UserName ] : ziggity\testing
You entered a domain ID [ ziggity\testing ]
while
循环 后输出...
# 1st run thru
testing@ziggity.com
# 2nd run thru
ziggity\testing