2017-02-09 8 views
0

У меня есть приложение, написанное классическим ASP. Мне нужно сравнить, если string1 содержит string2, поэтому я использую функцию instr. Однако даже строка1 содержит строку2, она всегда возвращает 0. Где проблема моего кода?Функция VBScript Instr всегда возвращается 0

function Findstring(string1,string2) 
    dim findstr,loc 

    on error resume next 
    loc= instr(1,Lcase(string1),Lcase(string2),1) 
    if loc>0 then 
     findstr=true 

    else 
     findstr= false 

    end if 


    end function 
+0

Я думаю, вы перепутали порядок параметров: 'InStr (1, Lcase (string2), Lcase (string1) , 1) 'даст желаемый результат. 1-й строковый параметр - это * строка для поиска *, вторая - строка * для поиска *. См. [MSDN] (https://msdn.microsoft.com/en-us/library/wybb344c (v = vs.84) .aspx) ... * Чтобы быть честным, мне пришлось перечитать документацию непосредственно перед Я мог бы объяснить это. * – Filburt

+0

Не уверен, что это ошибка копирования/вставки, но ваша функция ничего не возвращает. –

+0

string1: Строка для поиска. string2: Строковое выражение для поиска. например: string1 - «Я студент», строка2 - «am» – user788448

ответ

1
Function FindString(string1, string2) 
    FindString = False 
    On Error Resume Next 
    FindString = CBool(InStr(1, LCase(string1), LCase(string2), 1) > 0) 
End Function 

Эта функция возвращает True если string2 содержится внутри string1 и False в любом другом случае.

примечание: Почему CBool если оператор Comparision > уже формирует логическое? Потому что мы можем вызвать функцию, передающую значение Null. Если какая-либо из сравниваемых строк равна Null, то функция InStr возвращает Null, а тест Null > 0 оценивается в Null. Но CBool(Null) генерирует ошибку, захваченную предыдущим On Error (который также будет обрабатывать проблемы с объектами)

+0

Это работает. Большое спасибо! – user788448