forum.bitel.ru
http://forum.bitel.ru/

regex в скрипте валидации
http://forum.bitel.ru/viewtopic.php?f=1&t=1732
Страница 1 из 1

Автор:  a0d75 [ 17 дек 2008, 16:17 ]
Заголовок сообщения:  regex в скрипте валидации

Подскажите пожалуйста, как использовать regex в скрипте валидации? В договоре есть текстовое поле "IP адрес", хочу чтобы оно проверялось на соответствие следующему regex: ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$

Автор:  snark [ 17 дек 2008, 16:55 ]
Заголовок сообщения: 

как нить так:
Код:
import java.util.*;

IP_PARAM_ID = 10;
IP_PARAM_RE = "[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.[0-9]{3}";

paramId = event.getParamId();
value   = event.getValue();

if (paramId == IP_PARAM_ID) {
    if (value.length() > 0) {
        if (!value.matches(IP_PARAM_RE)) {
            event.setError("Неверно записан IP адрес!");
            return;
        }
    }
}
где 10 - код IP адреса

P.S. регексп конечно никудышный, т.к. под него попадет любой IP адрес, но кто мешает его переписать? ;)

Автор:  a0d75 [ 17 дек 2008, 18:39 ]
Заголовок сообщения: 

Спасибо, однако почему-то не работает :( В логах ошибка:

Цитата:
ERROR 17.12.2008 15:51:26 Eval error: Sourced file: inline evaluation of: ``import java.util.*; IP_PARAM_ID = 2; IP_PARAM_RE = "[0-9]{3}\.[0-9]{3}\.[0-9] . . . '' Token Parsing Error: Lexical error at line 4, column 25. Encountered: "." (46), after : "\"[0-9]{3}\\"
Sourced file: inline evaluation of: ``import java.util.*; IP_PARAM_ID = 2; IP_PARAM_RE = "[0-9]{3}\.[0-9]{3}\.[0-9] . . . '' Token Parsing Error: Lexical error at line 4, column 25. Encountered: "." (46), after : "\"[0-9]{3}\\": <at unknown location>

at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:158)
at bitel.billing.server.contract.action.ActionUpdateParameterType1.doAction(ActionUpdateParameterType1.java:35)
at bitel.billing.server.Executer.doModule(Executer.java:693)
at bitel.billing.server.Executer.doPost(Executer.java:177)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
INFO 17.12.2008 15:51:26 Process time => 2

Автор:  snark [ 17 дек 2008, 19:16 ]
Заголовок сообщения: 

скорее всего слеши ... поправьте так:
Код:
IP_PARAM_RE = "[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}";

Автор:  a0d75 [ 17 дек 2008, 20:50 ]
Заголовок сообщения: 

пробовал, к сожалению не они :(

Цитата:
ERROR 17.12.2008 17:47:25 Eval error: Sourced file: inline evaluation of: ``import java.util.*; IP_PARAM_ID = 2; IP_PARAM_RE = "[0-9]{3}\\.[0-9]{3}\\.[0- . . . '' : Error in method invocation: No args method getParamId() not found in class'bitel.billing.server.script.bean.event.ValidateTextParamEvent'
Sourced file: inline evaluation of: ``import java.util.*; IP_PARAM_ID = 2; IP_PARAM_RE = "[0-9]{3}\\.[0-9]{3}\\.[0- . . . '' : Error in method invocation: No args method getParamId() not found in class'bitel.billing.server.script.bean.event.ValidateTextParamEvent' : at Line: 6 : in file: inline evaluation of: ``import java.util.*; IP_PARAM_ID = 2; IP_PARAM_RE = "[0-9]{3}\\.[0-9]{3}\\.[0- . . . '' : event .getParamId ( )

at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHAssignment.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.eval(Unknown Source)
...

Автор:  snark [ 17 дек 2008, 21:16 ]
Заголовок сообщения: 

на каком событии висит код? у меня прекрасно тестит регекспами мобильные телефоны на событии "Перед изменением параметра договора", а у Вас где оно? случаем не в редакторе параметров, там где можно валидацию написать? ;)

Автор:  Amir [ 17 дек 2008, 21:51 ]
Заголовок сообщения: 

paramId = event.getParamId();
if (paramId == IP_PARAM_ID) {
не нужны, так как проверка привязывается к параметру.
Код:
import java.util.*;

//IP_PARAM_ID = 10;
IP_PARAM_RE = "[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.[0-9]{3}";

//paramId = event.getParamId();
value   = event.getValue();

//if (paramId == IP_PARAM_ID) {
    if (value.length() > 0) {
        if (!value.matches(IP_PARAM_RE)) {
            event.setError("Неверно записан IP адрес!");
            return;
        }
    }
//}

Автор:  snark [ 17 дек 2008, 22:02 ]
Заголовок сообщения: 

а если несколько параметров проверять?

Автор:  a0d75 [ 18 дек 2008, 11:51 ]
Заголовок сообщения: 

snark писал(а):
на каком событии висит код? у меня прекрасно тестит регекспами мобильные телефоны на событии "Перед изменением параметра договора", а у Вас где оно? случаем не в редакторе параметров, там где можно валидацию написать? ;)


спасибо :)

Автор:  snark [ 18 дек 2008, 16:53 ]
Заголовок сообщения: 

a0d75 писал(а):
спасибо :)

незачто в общем то ...

P.S. в догонку, вдруг кому пригодится - скрипт проверяет правильность ввода телефонного номера с кодом 4, если это домашний (у меня 5-ти значные телефоны), то должен вводиться в одном формате, если это сотовый - то в другом ...
Код:
import java.util.*;

PHONE_PARAM_ID        = 4;
PHONE_PARAM_RE_HOME   = "[0-9]{1}-[0-9]{2}-[0-9]{2}";
PHONE_PARAM_RE_MOBILE = "\\+7 \\([0-9]{3}\\) [0-9]{3}-[0-9]{2}-[0-9]{2}";

paramId = event.getParamId();
value   = event.getValue();

if (paramId == PHONE_PARAM_ID) {
    PHONE_LENGTH = value.length();
    if (PHONE_LENGTH > 0) {
        if (PHONE_LENGTH <= 7) {
            if (!value.matches(PHONE_PARAM_RE_HOME)) {
                event.setError("Неверно записан номер домашнего телефона!\nНомер должен быть записан в формате: 1-12-12");
                return;
            }
        } else if (PHONE_LENGTH >= 10 && PHONE_LENGTH <= 18) {
            if (!value.matches(PHONE_PARAM_RE_MOBILE)) {
                event.setError("Неверно записан номер мобильного телефона!\nНомер должен быть записан в формате: +7 (123) 123-12-12");
                return;
            }
        } else {
            event.setError("Не надо писать что попало!");
            return;
        }
    }
}
просто удобно когда в распечатках одинаковый формат :)

Автор:  stark [ 19 дек 2008, 13:27 ]
Заголовок сообщения: 

2 snark - закиньте в wiki, плиз

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/