VB.NET 2008/VB - 문자열

정규식을 활용한 문자열 유효성 검사

본클라쓰 2011. 4. 8. 09:29

 

유효성 검사 함수는 문자열이 특정 요구 사항을 충족하는지 여부를 결정합니다. 유효성을 검사하려는 문자열은 다음 세 가지 범주로 구분됩니다.

 

1. 확실히 유효합니다.

2. 확실히 유효하지 않습니다.

3. 확실히 유효하지 않거나 유효하지 않습니다.

 

 

처음 두 범주에서는 유효성 검사 함수가 문자열을 어떻게 처리해야 할지가 명확하지만 세째 범주에서는 다소 문제가 있습니다. 셋째 범주에서 문자열을 처리하는 방법에 따라 유효성 검사 함수는 다음과 같이 두 가지 범주로 그룹화될 수 있습니다.

 

 

· 보수적인 유효성 검사 함수 : 문자열의 유효한 것으로 확인될 수 있는 유효성만 검사합니다.

 

응용 프로그램이 보안을 위해 문자열에 의존하고 있는 경우 보수적인 유효성 검사 함수를 사용해야 합니다. 예를 들어, 허용되지 않는 요소만을 가려내기 위한 필터는 만들지 않는 것이 좋습니다. 악의적인 입력을 모두 예측하는 것은 어렵습니다. 필터를 꼭 만들어야 할 경우에는 허용되는 입력을 정의하는 필터를 만듭니다.

 

· 관대한 유효성 검사 함수 : 이러한 함수는 문자열이 확실히 유효하지 않은 경우가 아니라면 모든 문자열의 유효성을 검사합니다. 

 

사용자 프로필 저장과 같이 보안과 관련되지 않은 작업을 수행하는 경우에는 일반적으로 보수적인 유효성 검사 함수보다 융통성 있고 사용자에게 친숙한 관대한 유효성 검사 함수를 사용할 수 있습니다.

 

 

 

정규식 

 

.NET Framework Regex 정규식 클래스를 사용하여 문자열이 특정 패턴과 일치하거나 문자열에 특정 패턴이 있는지 확인할 수 있습니다.

 

 

 

 

파일 이름 및 경로 확인

 

다음 예제는 문자열이 파일 이름인지, 아니면 파일 경로인지를 나타내는 Boolean 값을 반환합니다. 유효성 검사를 통해 파일 시스템에서 허용하지 않는 문자가 이름에 포함되어 있는지 여부를 확인합니다.

 

 

Function IsValidFileNameOrPath(name As Sting) As Boolean

 

    ' Detemines if the name is Nothing.

    If name Is Nothing Then

        return False

    End If

 

    ' Determines if there are bad characters in the name.

    For Each badChar As Char In System.IO.Path.GetInvalidPathChars

        If InStr(name, badChar) > 0 Then

            Return False

        End If

    Next

 

End Function

 

 

이 예제는 이름에서 콜론의 위치가 잘못되었는지, 이름이 없는 디렉터리인지 또는 이름의 길이가 시스템에서 정의한 최대 길이를 초과하는지 여부를 확인하지 않습니다. 또한 지정한 이름을 갖는 파일 시스템 리소스에 액세스할 권한이 응용 프로그램에 있는지 여부도 확인하지 않습니다.

 

 

 

날짜 또는 시간을 나타내는 문자열  

 

다음 예제는 문자열이 유효한 날짜나 시간을 표시하는지 여부를 나타내는 Boolean 값을 설정합니다.

 

Dim isValidDate As Boolean = IsDate("01/01/03")

Dim isValidTime As Boolean = IsDate("9:30 PM")

 

 

 

전자 메일 주소를 나타내는 문자열 확인

 

다음 예제는 문자열이 유효한 전자 메일 주소를 표시하는지 여부를 나타내는 Boolean 변수를 설정합니다.

 

Function ValidateEmail(ByVal email As String) As Boolean

 

    Dim emailRegex As New System.Text.Regularexpressions.Regex("^(?<user>[^@]+)@(?<host>.+)$")

    Dim emailMath AS Sytem.Text.Regularexpressions.Match = emailRegex.Match(email)

 

    Return emailMatch.Success

 

End Function