2017-03-29 1 views
1

대소 문자가 혼용되었는지 테스트하거나 대소 문자 혼합으로 사용자 입력을 변경하는 방법을 파악하려고합니다. 그들이 올바른 케이스에 케이스를 변경하지 않은 경우사용자 입력 유효성 검증은 대소 문자가 혼합 된 요구 사항과 일치합니다

$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests' 

그러나, 나는 사용자가 정확한 경우에 입력 된 것을 확인해야하고, :

현재 내 코드로 구성되어 있습니다. 나는 여기와 다른 웹 사이트에서 여러 가지 다른 질문을 검토했지만, 이해할 수있는 방식으로 대소 문자가 혼합되었는지를 확인하는 것에 관해서는 정말로 아무 말도하지 않는 것 같습니다.

  1. Validate User Entry
  2. Regex to match mixed case words
  3. Validating String User Entry
  4. How to check if a string is all upper case (lower case) characters?
  5. Learn Powershell | Achieve More
  6. How To Validate Parameters in PowerShell
  7. $args in powershell
01,

나는 코드 작성을 요구하는 사람이 아닙니다. 항목의 유효성을 검사하고 변경하는 방법에 대한 이해를 얻을 수있는 샘플 코드를 요청합니다.

답변

3

PowerShell은 기본적으로 대/소문자를 구분하지 않는 비교를 수행하므로 질문의 첫 번째 부분에 답하려면 -ceq 인 대/소문자 구분 비교를 수행해야합니다.

$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests' 
($Type -ceq 'MY' -or $Type -ceq 'OLD' -or $Type -ceq 'NEWTest' -or $Type -ceq 'Old_Tests') 

것과 간단한 해결책은 대소 문자를 구별이 -ccontains 포함 사용할 수 있지만 :

('MY', 'OLD', 'NEWTest', 'Old_Tests' -ccontains $Type) 

여기에 당신이 경우 정정 할 수 하나 개의 방법 :

$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests' 

If ('MY', 'OLD', 'NEWTest', 'Old_Tests' -cnotcontains $Type){ 

    If ('MY', 'OLD', 'NEWTest', 'Old_Tests' -contains $Type){ 
     $TextInfo = (Get-Culture).TextInfo 

     $Type = Switch ($Type) { 
      {$_ -in 'MY','OLD'} { $Type.ToUpper() } 
      'NEWTest'   { $Type.Substring(0,4).ToUpper() + $Type.Substring(4,3).ToLower() } 
      'Old_Tests'   { $TextInfo.ToTitleCase($Type) } 
     } 
    } Else { 
     Write-Warning 'You didnt enter one of: MY, OLD, NEWTest, Old_Tests' 
    } 
} 

Write-Output $Type 

설명 :

먼저 케이스가 correctc인지 테스트합니다. 4 가지 허용 단어 (-cnotcontains 대/소문자 구분 안함)에 대해 t를 사용합니다. 대소 문자가 정확하지 않으면 텍스트가 올바른지 테스트합니다 (대소 문자 구분없이 대처할 필요 없음 -contains). 텍스트가 정확하면

는 우리는 우리가 케이스를 적용 할 다양한 시나리오를 다루는 스위치 문을 사용

첫 번째 스위치 테스트가 처음 두 단어를 일치 단순히 ToUpper() 문자열을 uppercases 방법.

두 번째 스위치 테스트는 문자열 메서드 SubString을 사용하여 첫 번째 문자 (0)부터 시작하여 길이가 4자인 문자열의 하위 집합을 가져옵니다. ToUpper를 사용하여 대문자로 시작한 다음 문자의 다음 3 문자를 추가합니다.이 문자의 첫 번째 문자는으로 소문자로 시작하는 4 번째 문자부터 시작합니다.

get-culture cmdlet에서 가져온 .NET 메서드를 사용하여 처리하는 최종 스위치 테스트로 제목 Case 문자열을 만들 수 있습니다 (각 단어의 첫 문자를 대문자로 만드십시오).

입력 된 텍스트가 write-warning (사용하지 않는 경우 PowerShell 4 이상이 필요할 수도 있음) 옵션 중 하나와 일치하지 않는 경우 콘솔에 경고를 인쇄하려면 write-host으로 변경하십시오.

마지막으로 입력 된 내용은 Write-Output으로 stdout으로 전송됩니다.

+0

어떻게 newtest를 NEWTest로 변경할 수 있습니까? – Underdog

+0

답변을 업데이트했습니다. –

+0

죄송합니다. Mark, 나는 어제 다른 항목들과 묶여있어 당신의 보호 관찰을 확인할 기회를 얻지 못했습니다. 귀하의 솔루션을 테스트 한 결과 여전히 위 또는 아래로 케이스를 변경하지 않습니다. Enter My, Old, NewTest, Old_Tests : newtest Write-Output = newtest – Underdog

관련 문제