VB6Parse / Library / String / lcase

VB6 Library Reference

LCase Function

Returns a String that has been converted to lowercase.

Syntax

LCase(string)

Parameters

Return Value

Returns a String: - Contains the same string with all uppercase letters converted to lowercase - Lowercase letters and non-alphabetic characters are unchanged - Returns Null if string argument is Null - Empty string returns empty string - Only affects A-Z characters (not accented characters in some locales) - Numbers, punctuation, and symbols are unchanged - Whitespace is preserved

Remarks

The LCase function converts uppercase letters to lowercase:

Typical Uses

  1. Case-Insensitive Comparison: Compare strings ignoring case
  2. User Input Normalization: Convert user input to consistent case
  3. File Path Comparison: Compare file paths case-insensitively (on Windows)
  4. Search Operations: Case-insensitive text searching
  5. Data Validation: Normalize data for validation
  6. Database Queries: Prepare strings for case-insensitive matching
  7. Email Addresses: Normalize email addresses to lowercase
  8. Configuration Keys: Standardize configuration key format

Basic Usage Examples

' Example 1: Basic lowercase conversion
Dim result As String

result = LCase("HELLO")              ' "hello"
result = LCase("Hello World")        ' "hello world"
result = LCase("VB6 Programming")    ' "vb6 programming"

' Example 2: Case-insensitive comparison
Dim input As String
input = "Yes"

If LCase(input) = "yes" Then
MsgBox "User answered yes"
End If

' Example 3: Mixed case preservation
Dim text As String
text = "Hello123WORLD"

Debug.Print LCase(text)              ' "hello123world" - numbers unchanged

' Example 4: Null handling
Dim value As Variant
value = Null

Debug.Print IsNull(LCase(value))     ' True - Null propagates

Common Patterns

' Pattern 1: Case-insensitive string comparison
Function EqualsIgnoreCase(str1 As String, str2 As String) As Boolean
EqualsIgnoreCase = (LCase(str1) = LCase(str2))
End Function

' Pattern 2: Case-insensitive contains check
Function ContainsIgnoreCase(text As String, searchFor As String) As Boolean
ContainsIgnoreCase = (InStr(1, LCase(text), LCase(searchFor)) > 0)
End Function

' Pattern 3: Normalize user input
Function NormalizeInput(userInput As String) As String
NormalizeInput = LCase(Trim(userInput))
End Function

' Pattern 4: Validate yes/no input
Function IsYes(input As String) As Boolean
Select Case LCase(Trim(input))
Case "yes", "y", "true", "1"
IsYes = True
Case Else
IsYes = False
End Select
End Function

' Pattern 5: Case-insensitive array search
Function FindInArray(arr As Variant, searchValue As String) As Long
Dim i As Long
Dim searchLower As String

FindInArray = -1
If Not IsArray(arr) Then Exit Function

searchLower = LCase(searchValue)
For i = LBound(arr) To UBound(arr)
If LCase(arr(i)) = searchLower Then
FindInArray = i
Exit Function
End If
Next i
End Function

' Pattern 6: Extract lowercase letters only
Function GetLowercaseLetters(text As String) As String
Dim i As Long
Dim char As String
Dim result As String

result = ""
For i = 1 To Len(text)
char = Mid(text, i, 1)
If char = LCase(char) And char >= "a" And char <= "z" Then
result = result & char
End If
Next i

GetLowercaseLetters = result
End Function

' Pattern 7: Normalize email address
Function NormalizeEmail(email As String) As String
NormalizeEmail = LCase(Trim(email))
End Function

' Pattern 8: Case-insensitive Replace
Function ReplaceIgnoreCase(text As String, findStr As String, _
replaceStr As String) As String
Dim pos As Long
Dim result As String
Dim textLower As String
Dim findLower As String

result = text
textLower = LCase(text)
findLower = LCase(findStr)

pos = InStr(1, textLower, findLower)
Do While pos > 0
result = Left(result, pos - 1) & replaceStr & _
Mid(result, pos + Len(findStr))
textLower = LCase(result)
pos = InStr(pos + Len(replaceStr), textLower, findLower)
Loop

ReplaceIgnoreCase = result
End Function

' Pattern 9: Check if string is all lowercase
Function IsAllLowercase(text As String) As Boolean
IsAllLowercase = (text = LCase(text))
End Function

' Pattern 10: Toggle case
Function ToggleCase(text As String) As String
Dim i As Long
Dim char As String
Dim result As String

result = ""
For i = 1 To Len(text)
char = Mid(text, i, 1)
If char = UCase(char) Then
result = result & LCase(char)
Else
result = result & UCase(char)
End If
Next i

ToggleCase = result
End Function

Advanced Usage Examples

' Example 1: Case-insensitive dictionary/lookup
Public Class CaseInsensitiveDictionary
Private m_dict As Object  ' Scripting.Dictionary

Private Sub Class_Initialize()
Set m_dict = CreateObject("Scripting.Dictionary")
m_dict.CompareMode = vbTextCompare  ' Alternative to LCase
End Sub

Public Sub Add(key As String, value As Variant)
Dim keyLower As String
keyLower = LCase(key)

If m_dict.Exists(keyLower) Then
Err.Raise 457, "CaseInsensitiveDictionary", "Key already exists"
End If

If IsObject(value) Then
Set m_dict(keyLower) = value
Else
m_dict(keyLower) = value
End If
End Sub

Public Function Get(key As String) As Variant
Dim keyLower As String
keyLower = LCase(key)

If Not m_dict.Exists(keyLower) Then
Err.Raise 5, "CaseInsensitiveDictionary", "Key not found"
End If

If IsObject(m_dict(keyLower)) Then
Set Get = m_dict(keyLower)
Else
Get = m_dict(keyLower)
End If
End Function

Public Function Exists(key As String) As Boolean
Exists = m_dict.Exists(LCase(key))
End Function

Public Sub Remove(key As String)
m_dict.Remove LCase(key)
End Sub
End Class

' Example 2: Text search with case-insensitive highlighting
Public Class TextHighlighter
Public Function Highlight(text As String, searchTerm As String, _
highlightStart As String, _
highlightEnd As String) As String
Dim result As String
Dim pos As Long
Dim lastPos As Long
Dim textLower As String
Dim searchLower As String

If Len(searchTerm) = 0 Then
Highlight = text
Exit Function
End If

result = ""
lastPos = 1
textLower = LCase(text)
searchLower = LCase(searchTerm)

pos = InStr(lastPos, textLower, searchLower)
Do While pos > 0
' Add text before match
result = result & Mid(text, lastPos, pos - lastPos)
' Add highlighted match
result = result & highlightStart & _
Mid(text, pos, Len(searchTerm)) & highlightEnd

lastPos = pos + Len(searchTerm)
pos = InStr(lastPos, textLower, searchLower)
Loop

' Add remaining text
result = result & Mid(text, lastPos)

Highlight = result
End Function
End Class

' Example 3: String matcher with wildcards
Public Class WildcardMatcher
Public Function Matches(text As String, pattern As String, _
Optional caseSensitive As Boolean = False) As Boolean
Dim textToMatch As String
Dim patternToMatch As String

If caseSensitive Then
textToMatch = text
patternToMatch = pattern
Else
textToMatch = LCase(text)
patternToMatch = LCase(pattern)
End If

Matches = MatchesInternal(textToMatch, patternToMatch)
End Function

Private Function MatchesInternal(text As String, pattern As String) As Boolean
' Simple wildcard matching (* = any chars, ? = any single char)
If pattern = "*" Then
MatchesInternal = True
Exit Function
End If

If Len(pattern) = 0 Then
MatchesInternal = (Len(text) = 0)
Exit Function
End If

If Left(pattern, 1) = "*" Then
' Try matching rest of pattern at various positions
Dim i As Long
For i = 0 To Len(text)
If MatchesInternal(Mid(text, i + 1), Mid(pattern, 2)) Then
MatchesInternal = True
Exit Function
End If
Next i
MatchesInternal = False
ElseIf Left(pattern, 1) = "?" Then
If Len(text) > 0 Then
MatchesInternal = MatchesInternal(Mid(text, 2), Mid(pattern, 2))
Else
MatchesInternal = False
End If
Else
If Len(text) > 0 And Left(text, 1) = Left(pattern, 1) Then
MatchesInternal = MatchesInternal(Mid(text, 2), Mid(pattern, 2))
Else
MatchesInternal = False
End If
End If
End Function
End Class

' Example 4: Command parser with case-insensitive commands
Public Class CommandParser
Private m_commands As Collection

Private Sub Class_Initialize()
Set m_commands = New Collection
End Sub

Public Sub RegisterCommand(commandName As String, handler As Object)
m_commands.Add handler, LCase(commandName)
End Sub

Public Function Parse(input As String) As Boolean
Dim parts() As String
Dim command As String
Dim handler As Object

Parse = False
input = Trim(input)
If Len(input) = 0 Then Exit Function

parts = Split(input, " ")
If UBound(parts) < 0 Then Exit Function

command = LCase(parts(0))

On Error Resume Next
Set handler = m_commands(command)
On Error GoTo 0

If Not handler Is Nothing Then
' Execute command handler
' handler.Execute(parts)
Parse = True
End If
End Function

Public Function GetCommandList() As String
Dim i As Long
Dim result As String

result = ""
For i = 1 To m_commands.Count
If i > 1 Then result = result & ", "
' Note: Can't easily get key from Collection
' This is simplified example
Next i

GetCommandList = result
End Function
End Class

Error Handling

LCase handles special cases gracefully:

' Empty string returns empty string
Debug.Print LCase("")                ' ""

' Null propagates
Dim value As Variant
value = Null
Debug.Print IsNull(LCase(value))     ' True

' Non-alphabetic characters unchanged
Debug.Print LCase("123!@#")          ' "123!@#"

' Mixed content
Debug.Print LCase("ABC123xyz")       ' "abc123xyz"

' Safe pattern with Null check
Function SafeLCase(value As Variant) As String
If IsNull(value) Then
SafeLCase = ""
Else
SafeLCase = LCase(value)
End If
End Function

Performance Considerations

Performance tips:

' Less efficient - multiple conversions
If LCase(str1) = LCase(str2) And LCase(str1) = LCase(str3) Then

' More efficient - cache conversion
Dim str1Lower As String
str1Lower = LCase(str1)
If str1Lower = LCase(str2) And str1Lower = LCase(str3) Then

Best Practices

  1. Case-Insensitive Comparisons: Always use LCase for both operands
  2. Null Handling: Check for Null before calling LCase if needed
  3. Cache Results: Store converted strings when used multiple times
  4. Database Comparisons: Use LCase to normalize before database queries
  5. User Input: Always normalize user input with LCase + Trim
  6. Email Addresses: Convert email addresses to lowercase for storage/comparison
  7. File Extensions: Use LCase when comparing file extensions
  8. Configuration: Use consistent casing for configuration keys
Function Purpose Returns Use Case
LCase Convert to lowercase String Lowercase conversion
UCase Convert to uppercase String Uppercase conversion
StrComp Compare strings Integer Case-sensitive or insensitive comparison
Trim Remove whitespace String Cleanup whitespace
Left/Right/Mid Extract substring String Substring extraction

LCase vs StrComp

Dim str1 As String, str2 As String
str1 = "Hello"
str2 = "HELLO"

' Using LCase for comparison
If LCase(str1) = LCase(str2) Then
MsgBox "Equal (case-insensitive)"
End If

' Using StrComp for comparison
If StrComp(str1, str2, vbTextCompare) = 0 Then
MsgBox "Equal (case-insensitive)"
End If

' LCase is more explicit and readable for simple comparisons
' StrComp is better when you need the comparison result (-1, 0, 1)

LCase$ Variant

' LCase returns Variant
Dim result As Variant
result = LCase("HELLO")

' LCase$ returns String (slightly faster, cannot handle Null)
Dim resultStr As String
resultStr = LCase$("HELLO")

' LCase$ will error on Null
' resultStr = LCase$(Null)  ' Error 94: Invalid use of Null

Platform and Version Notes

Limitations

← Back to String | View all functions