Можете ли вы отключить чувствительность к регистру в строках VBScript? - PullRequest
2 голосов
/ 20 ноября 2008

Я почти уверен, что ответ на этот вопрос - нет. Я знаю, что могу написать

если lcase (strFoo) = lcase (request.querystring ("x")), то ...

или используйте inStr, но я просто хочу проверить, нет ли в реестре или где-то еще недокументированного параметра, который бы позволял содержимому строк VBScript вести себя согласованно с остальным языком сценариев!

Спасибо Dan

Ответы [ 3 ]

10 голосов
/ 22 ноября 2008

Существует функция StrComp, которая позволяет выполнять сравнение двух строк без учета регистра, передавая vbTextCompare в качестве третьего аргумента. Основная документация не делает это очевидным, но это обсуждается в этой статье Эй, автор сценариев .

Например:

If StrComp(strFoo, Request.QueryString("x"), vbTextCompare) = 0 Then ...

Однако на практике я использую LCase или UCase намного больше, чем StrComp для сравнения строк без учета регистра, потому что это более очевидно для меня.

5 голосов
/ 20 ноября 2008

Нет. В зависимости от функции опция может быть (например, InStr) в качестве необязательного параметра, но для простого сравнения глобальная опция отсутствует.

Одна малоизвестная опция, которая может быть полезна, это если у вас есть список строк, и вы хотите увидеть, есть ли строка в этом списке:

Dim dicList : Set dicList = CreateObject("Scripting.Dictionary")
Dim strTest

dicList.CompareMode = 0 ' Binary ie case sensitive
dicList.Add "FOO", ""
dicList.Add "BAR", ""
dicList.Add "Wombat", ""

strTest = "foo"
WScript.Echo CStr(dicList.Exists(strTest))

Set dicList = CreateObject("Scripting.Dictionary")
dicList.CompareMode = 1 ' Text ie case insensitive
dicList.Add "FOO", ""
dicList.Add "BAR", ""
dicList.Add "Wombat", ""

strTest = "foo"
WScript.Echo CStr(dicList.Exists(strTest))
1 голос
/ 20 ноября 2008

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

...