Это больше, чем вы хотели, но, надеюсь, это будет хорошим обучающим упражнением :) Если вы решаете логические задачи, вам не нужно использовать Replace()
, ToCharArray()
или Split()
...
Отправной точкой здесь является то, что все входные переменные должны быть в нижнем регистре, альфа-символы (только a-z
), это может быть достигнуто следующим образом:
$Initials_input = (Read-Host -Prompt 'Please enter initials').tolower() -replace "\W"
Специальный бит здесь -replace "\W"
при этом используются регулярные выражения-символы для удаления любых несловарных символов (чисел / пробелов / специальных символов), оставляя только A-Z
или a-z
.
Затем, чтобы упростить процессчтобы потом преобразовать в TitleCase или UpperCase, я также использовал .tolower()
.
Как только вы узнаете состояние всех ваших входных данных, вы можете просто построить строки в желаемом формате и преобразовать в требуемыйcase.
Обратите внимание, что я не изменяю входные переменные, они остаются как есть.Таким образом, они представляют собой известное количество, и вам не нужно отменять изменения, которые требуются одной переменной для создания другой:
$Initials_input = (Read-Host -Prompt 'Please enter initials').tolower() -replace "\W"
$Firstname_input = (Read-Host -Prompt 'Please enter firstname').tolower() -replace "\W"
$Lastname_input = (Read-Host -Prompt 'Please enter surname').tolower() -replace "\W"
$Firstname = (Get-Culture).textinfo.totitlecase($Firstname_input)
$Lastname = (Get-Culture).textinfo.totitlecase($Lastname_input)
$Initials = $Initials_input.ToUpper()
$UserID = $Initials_input + $Lastname_input
$AliasID = $Initials_input + '.' + $Lastname_input
Как видите, кода гораздо меньше, и это легко увидеть.в каком формате будут выводиться ваши данные.
Пример ввода:
$Initials_input = 'jxz'
$Firstname_input = 'john'
$Lastname_input = 'smith'
Дает выходные данные:
- $ Имя =
John
- $ Фамилия =
Smith
- $ Инициалы =
JXZ
- $ UserID =
jxzsmith
- $ AliasID =
jxz.smith