Как Регулярные Выражения Прикрутить К Lotusscript?

  • Автор темы StarikStarik2705
  • Дата начала
S

StarikStarik2705

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

If Trim(Cstr(source.FieldGetText("Hours")))="" Then
Msgbox "Необходимо заполнить числовым значением"
Continue=False
Exit Sub
Else
Const ErrMsg = "Поле должно иметь следующий формат: <целое число>,5 или <целое число>"
Dim tstr As String
Dim IntPart As String
Dim FloatPart As String

tstr = source.FieldGetText("Hours")

IntPart = Strleft( tstr, "," )
If Len( IntPart ) > 0 Then ' проверяем отдельно целую и дробную части
FloatPart = Strright( tstr, "," )
If Not IsInteger( IntPart ) Then
Msgbox ErrMsg
Continue = False
Elseif FloatPart <> "5" Then
Msgbox ErrMsg
Continue = False
End If
Elseif Not IsInteger( tstr )
Msgbox ErrMsg
Continue = False
на явеСкрипт это так выглядит


var flag;
var expr = /^[0-9](,5)?$|^1[0-9](,5)?$|^2[0-3](,5)?$|^24$/;

flag = false;

flag = expr.test( document.getElementById( "Hours" ).value );
if (!flag){
alert( "Поле Часы должно иметь следующий формат: <целое число>,5 или <целое число>" );
}else{
if (chDate()){
document.getElementById("idbtnsave").click();
}
}

можно использовать регулярное выражение для Лотуса Скрип к примеру функцию написать что бы написано было на лотусескрипте но с использованием свойств регулярного выражения? вообще возможно ли это?
 
M

morpheus

Это Вы про Like што ле?

This example uses Like as a validation formula for city and zip fields.
if doc.city(0) like "*[0-9]*" then messagebox _
"city field contains a number"
if doc.zip(0) like "*[a-z,A-Z]*" then messagebox _
"zip code field contains a character"
 
N

nvyush

У LS есть оператор Like. Проверяет не регулярные выражения, но может подойти. Если же нужны именно регулярные выражения, можно вызывать Яву через LS2J.
 
S

StarikStarik2705

У LS есть оператор Like. Проверяет не регулярные выражения, но может подойти. Если же нужны именно регулярные выражения, можно вызывать Яву через LS2J.
спасибо мужики я уже написал всё оказалось не так сложно но думаю функция очень полезная, покрайне мере для меня очень!!!!!


' RegEx - передавать регурярное выражение в кавычках "RegEx", Field - значение поля
'Функция вернёт True если значение поля прошло фильтр выражения, и False если не прошло
Function RegExpFunc(RegEx As String, Field As String)
Dim regexpObj
Dim teststring As String
Dim re As String
re = RegEx
teststring = Field
Set regexpObj = CreateObject("VBScript.RegExp")
regexpObj.Pattern = re
regexpObj.Global = True
RegExpFunc = regexpObj.test(teststring)
End Functio
 
H

hosm

странно, что никто не нападает, что оле для данной задачи как-то некошерно :)
Имхо, через like можно было сообразить что-то подобное такому:
Код:
tstr = source.FieldGetText("Hours")
dim patterns(0 to 5) as String
dim ok as boolean
patterns(0) = "#"
patterns(1) = "#,5"
patterns(2) = "1#" 
patterns(3) = "1#,5" 
patterns(4) = "2[0-4]" 
patterns(5) = "2[0-3],5"
// или так: dim patterns as Variant : patterns = split("#:#,5:1#:1#,5:2[0-4]:2[0-3],5", ":")
ok=false
forall pattern in patterns
if tstr like pattern then
ok = true
exit forall
end if
end forall
if not ok then
Msgbox ErrMsg
Continue = False
end if
не тестировала ;)

Добавлено: и вместо [0-9] надо #. исправила
 
N

nvyush

спасибо мужики я уже написал всё оказалось не так сложно но думаю функция очень полезная, покрайне мере для меня очень!!!!!
КМК, полезней использовать родные средства:
Код:
Uselsx "*javacon"
Function matchesToRegEx(testString As String, regEx As String)
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jMethod As JavaMethod

Set jSession = New JavaSession()
Set jClass = jSession.GetClass("java/util/regex/Pattern")
Set jMethod = jClass.GetMethod("matches", "(Ljava/lang/String;Ljava/lang/CharSequence;)Z")
matchesToRegEx = jMethod.Invoke(, regEx, testString)
End Function
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
странно, что никто не нападает, что оле для данной задачи как-то некошерно
устали объяснять, что вляпаться в ОЛЕ - это плохо...
вот ребенку скока не говори - не брать каку - будет брать пока не вырастет (а может и потом - ежели привыкнет :) )
 
S

StarikStarik2705

Та неееее у меня эе потом я смогу использоват при много кратной проверке для самых разных случаев, только регулярку подбери нудную))) и чего не кошерно дял поля? на выходе проверка всего четыре строки а не целая лента ))

Добавлено: спасибо большое!

Добавлено:
устали объяснять, что вляпаться в ОЛЕ - это плохо...
вот ребенку скока не говори - не брать каку - будет брать пока не вырастет (а может и потом - ежели привыкнет :) )

простите а вы не могли бы обьяснить почему ОЛЕ(Object Linking and Embedding) не хорошо брать? к чему это может привести?
 
N

nvyush

простите а вы не могли бы обьяснить почему ОЛЕ(Object Linking and Embedding) не хорошо брать? к чему это может привести?
Lotus Notes зверь кроссплатформенный, OLE — Windows only. Захочет Ваш мегабосс поставить себе мак со снежным барсом — что делать будете?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
помимо отсутствия кроссплатформенности и того что МС болт положила на ОЛЕ (увлеклась сначала .НЕТ, а терь хтмл5), есть ещё момент настройки
ОЛЕ регается в системе, но "это" может "слететь" и тогда будут костыли для: проверки, перерегистрации...
ошибки - ваще хз как обрабатывать и что они означают (у каждой КОМы свои приколы)

т.е. вместо решения одной проблемы (никак не связанной с МС технологиями) устраиваем русскую рулетку с виндой (я даже могу сказать - кто проиграет)
 
S

StarikStarik2705

помимо отсутствия кроссплатформенности и того что МС болт положила на ОЛЕ (увлеклась сначала .НЕТ, а терь хтмл5), есть ещё момент настройки
ОЛЕ регается в системе, но "это" может "слететь" и тогда будут костыли для: проверки, перерегистрации...
ошибки - ваще хз как обрабатывать и что они означают (у каждой КОМы свои приколы)

т.е. вместо решения одной проблемы (никак не связанной с МС технологиями) устраиваем русскую рулетку с виндой (я даже могу сказать - кто проиграет)



ну а проблема решиться с использованием этой функции если как приведено выше я всё родное Uselsx "*javacon" буду применять?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
ну а проблема решиться с использованием этой функции если как приведено выше я всё родное Uselsx "*javacon" буду применять?
что останавливает?
код дали, даже в ф-цию оформили...
 
N

nvyush

ну а проблема решиться с использованием этой функции если как приведено выше я всё родное Uselsx "*javacon" буду применять?
А попробовать? Лепите агента, в (Options) втыкаете Uselsx "*javacon", в Initialize что-нибудь типа
Код:
Msgbox Cstr(matchesToRegEx("B", "[a-z]"))
, ну и саму функцию.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
да не т за это спасибо я имел ввиду что ОЛЕ у меня всё упадёт если это не виндовс будет
вывалит ошибку - что объекта нет и не сделает нужного
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
540
эээ... мне нужно проверить, что в строке есть ровно 8 цифр.
делаю через LS2J, рега: "/[0-9]{8}/"
Строка: Наклейка на С5 (44002002)
Результат false
Что я делаю не так?
Иногда количество символов нужно задать точнее. Это можно сделать с помощью фигурных скобок. Например, выражению [0-9]{8} соответствует любая последовательность из ровно восьми цифр
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
540
Как выяснилось "всё":
Java:
Session session = getSession();
		  AgentContext agentContext = session.getAgentContext();
 
		  // (Your code goes here)
 
		  String source = "Наклейка на С5 (44002002)";
		  String p = "[0-9]{8}";
		  
		  Pattern pa = Pattern.compile(p);
		  Matcher m = pa.matcher(source);
	 
		  b = m.find();
		  
		  JOptionPane.showMessageDialog(null, b + " : " + source + " | " + p + " -> " + m.group(0), "InfoBox: ", JOptionPane.INFORMATION_MESSAGE);
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
363
да не т за это спасибо я имел ввиду что ОЛЕ у меня всё упадёт если это не виндовс будет
Вне Windows OLE вообще нет. Да, и в Windows не всегда работает. Может так случится, что на какой-то конкретной машине этот класс/объект/сервер и пр. (как там эти компоненты OLE правильно называются?) вообще нерабочий/поломатый/неправильно установлен/не зарегистрирован. Вы вообще не разберётесь почему на этой машине ваш код не работает, а на всех других - нормально. Выход - переустанавливать Windows.

не пробовали использовать?
 

duchan

Green Team
20.09.2006
128
11
BIT
249
@garrick,
Может так случится, что ... вообще нерабочий/поломатый/неправильно установлен/не зарегистрирован
- извените, но это детская отмазка, поскольку на "конкретной машине", может быть и не исправно оборудывание (память сбоит) - вообще придется комп ремонтировать, я для явы, может не подойти текущая версия явы в "нотсе" - надо будет более свежий клиент ставить (а они кстати не совсем обратно совместимы, к слову), и вообще некоторые библиотеки явы надо ставить локально на каждый комп, что бы "странное" работало. Так что, сами видите, что Ваши доводы применимы к любой технологии, если вопрос в использовании сторонних наработок (не дефолтных лотусовых). У любого приложения есть минимальные системные требования - естественно, необходимо минимизировать зависимости, и использовать по возможности штатные средства (например, как в нашем случае RegExp из явы через LS2J), но иногда этих средств может не хватать и приходится использовать внешнее API (как для COM так и для Java) - тут вопрос в эффективности и обоснованности применения.
И в любом случае, для избежания проблем исполнения, необходимо проверять окружение при использовании внешних модулей (как с Java, так и COM), устанавливать не достающие модули и предупреждать об невозможности устранить проблему, если таковая случается.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!