Сравнение с учетом регистра (с) с оператором VB.NET LIKE во время выполнения (без Option Compare) - PullRequest
3 голосов
/ 25 июня 2011

Можно ли в любом случае использовать оператор LIKE в VB.NET как чувствительный к регистру или нечувствительный во время выполнения?Например, используйте флаг для сравнения с учетом регистра или без учета регистра.

Очевидно, что это можно сделать простым преобразованием их в нижний регистр и принудительным применением приложения к Option Compare Binary, но, возможно, есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 25 июня 2011

Я так не думаю.Однако, в любом случае, вам не следует использовать оператор Like, если важна нечувствительность к регистру - вместо этого используйте регулярные выражения.

Dim re As New System.Text.RegularExpressions.Regex("^.+ough$", System.Text.RegularExpressions.RegexOptions.IgnoreCase)

re.IsMatch("rough") ' True
re.IsMatch("tough") ' True
re.IsMatch("rOUGH") ' True
re.IsMatch("ough")  ' False

Изучить многое, но в основном . эквивалентно ?, .* эквивалентно *, а \d эквивалентно #.Вы также должны обернуть его в ^ и $ для эквивалентности.Регулярные выражения гораздо мощнее и будут делать то, что вам нужно.

Возможно, вам следует добавить Imports System.Text.RegularExpressions, если вы планируете их часто использовать.Они также могут быть скомпилированы и использованы повторно для эффективности.

0 голосов
/ 20 мая 2015

Вы можете предоставить пользовательский класс, чтобы обеспечить сравнение без учета регистра, даже если настройки по умолчанию Compare Binary (с учетом регистра).Вы можете указать Option Compare в кодовом файле:

Option Compare Text

Public Class CaseInsensitiveLikeOperator
    Public Shared Function IsLike(str As String, pattern As String) As Boolean
        Return str Like pattern
    End Function
End Class

Теперь это работает:

Dim isSame = CaseInsensitiveLikeOperator.IsLike("foo", "Fo?") ' True

Если по умолчанию Option Compare Text, вы можете указать два класса для включениябезопасная сторона.

Возможно, лучший вариант - выучить регулярные выражения; -)

...