O detalhe importante é. após o nt ou ne não pode ter um número. É isso que sua expressão tem que declarar
Vamos lá mais uma vez para testes entao…
To conseguindo deixar assim:
private boolean formulaAvalMediaFinalVerdadeira() {
Pattern p = Pattern.compile("(\\d|[+*/().-]|n[te]\\D|np\\d+|\\s+)*");
Matcher m = p.matcher(crudObj.getFormulAvalMediaFinal());
return m.matches();
}
public boolean verificaCoerenciaFormulFinal() throws ScriptException {
String formulaFinal = crudObj.getFormulAvalMediaFinal();
String REGEX = "(n[te]|np\\d)";
StringBuffer novaFormulaFinal = new StringBuffer();
Matcher buscador = Pattern.compile(REGEX).matcher(formulaFinal);
while (buscador.find()) {
buscador.appendReplacement(novaFormulaFinal, "10.0");
}
buscador.appendTail(novaFormulaFinal);
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("javascript");
Bindings bindings = scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE);
Object resultadoFinal = scriptEngine.eval(novaFormulaFinal.toString());
if (resultadoFinal != null) {
return true;
} else {
return false;
}
}
Só que agora ele nao deixa por exemplo eu SOMENTE colocar o nt + ne, devo ter tbm um np1 junto por exemplo…Dicas?? Vlw Rodrigo…
Não faz sentido, que expressão matemática você está usando pra testar?
Por exemplo:
(np1 + np2 + np3)/ 3 //deve deixar passar
(nt + ne)/2 //deveria deixar passar mas nao deixa
(nt + np1)/2 // somente assim deixa passar
Tipo, está deixando passar somente quando coloco um np ao menos na fórmula…Poderia dar uma mão aí?? Vlw…
Testei aqui e ele validou as 3
Mas que diabos está acontecendo será??
Dessa maneira que eu estou validando está certo ?? Somente deixar que vá numeros quando o cara digita np: exemplo -> np1 + np2…
E deixar ele digitar tambem somente nt + ne SEM números???
Sim, veja:[code]public class Teste {
public static void main(String[] args) {
validate("(np1 + np2 + np3)/ 3"); // true
validate("(nt + ne)/2"); // true
validate("(nt + np1)/2"); // true
validate("(nt3 + np)"); // false
validate("ne4"); // false
}
public static void validate(String str) {
Pattern pattern = Pattern.compile("(\\d|[+*/().-]|n[te]\\D|np\\d+|\\s+)*");
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
}
}[/code]
[quote=Rodrigo Sasaki]Sim, veja:[code]public class Teste {
public static void main(String[] args) {
validate("(np1 + np2 + np3)/ 3"); // true
validate("(nt + ne)/2"); // true
validate("(nt + np1)/2"); // true
validate("(nt3 + np)"); // false
validate("ne4"); // false
}
public static void validate(String str) {
Pattern pattern = Pattern.compile("(\\d|[+*/().-]|n[te]\\D|np\\d+|\\s+)*");
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
}
}[/code][/quote]
Estou tentando colocar somente assim: nt + ne e ele nao está deixando…
Pra mim funciona Sem brincadeira. Com o código que postei aí pra você
Ok, mas vc colocou assim:
(nt + ne)/2
Será que sem os () /2 , somente com nt + ne funciona no teu tbm ?? No meu nao tá funcionando…
ah ta
“n[te]\D?”
[quote=Rodrigo Sasaki]ah ta
“n[te]\D?”[/quote]
Desculpe, mas não entendi…
[quote=Rodrigo Sasaki]ah ta
“n[te]\D?”[/quote]
Consegui, acredito que é somente colocar um “+” depois do D, correto? Vlw
Não, no caso tem que ser a interrogação mesmo
Bom dia Rodrigo, tdo certo ?? Desculpe, mas onde exatamente??
private boolean formulaAvalMediaFinalVerdadeira() {
Pattern p = Pattern.compile("(\\d|[+*/().-]|n[te]\\D+|np\\d+|\\s+)*");
Matcher m = p.matcher(crudObj.getFormulAvalMediaFinal());
return m.matches();
}
public boolean verificaCoerenciaFormulFinal() throws ScriptException {
String formulaFinal = crudObj.getFormulAvalMediaFinal();
String REGEX = "(n[te]|np\\d)";
StringBuffer novaFormulaFinal = new StringBuffer();
Matcher buscador = Pattern.compile(REGEX).matcher(formulaFinal);
while (buscador.find()) {
buscador.appendReplacement(novaFormulaFinal, "10.0");
}
buscador.appendTail(novaFormulaFinal);
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("javascript");
Bindings bindings = scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE);
Object resultadoFinal = scriptEngine.eval(novaFormulaFinal.toString());
if (resultadoFinal != null) {
return true;
} else {
return false;
}
}
A princípio tinha funcionado, mas porvias das dúvidas, queria saber onde devo alterar…Abc
Só ver aonde eu coloquei a interrogação. logo após o \D
Ela indica que se existir algo após o nt ou ne, não pode ser um número.
[quote=Rodrigo Sasaki]Só ver aonde eu coloquei a interrogação. logo após o \D
Ela indica que se existir algo após o nt ou ne, não pode ser um número.[/quote]
Blz Rodrigo, mto obrigado pela ajuda…Vlw msm…Abc
[quote=Rodrigo Sasaki]Só ver aonde eu coloquei a interrogação. logo após o \D
Ela indica que se existir algo após o nt ou ne, não pode ser um número.[/quote]
Boa tarde Rodrigo, tdo certo ?? Cara, achei um furo nas validações…Seguinte, se o cara colocar na fórmula só () ele nao salva, mas dá o seguinte erro no console:
Grave: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: syntax error (<Unknown source>#1) in <Unknown source> at line number 1
.
.
.
Caused by: sun.org.mozilla.javascript.internal.EvaluatorException: syntax error (<Unknown source>#1)
at sun.org.mozilla.javascript.internal.DefaultErrorReporter.runtimeError(DefaultErrorReporter.java:109)
at sun.org.mozilla.javascript.internal.DefaultErrorReporter.error(DefaultErrorReporter.java:96)
at sun.org.mozilla.javascript.internal.Parser.addError(Parser.java:231)
at sun.org.mozilla.javascript.internal.Parser.addError(Parser.java:209)
at sun.org.mozilla.javascript.internal.Parser.reportError(Parser.java:266)
at sun.org.mozilla.javascript.internal.Parser.reportError(Parser.java:253)
at sun.org.mozilla.javascript.internal.Parser.reportError(Parser.java:246)
at sun.org.mozilla.javascript.internal.Parser.primaryExpr(Parser.java:2862)
at sun.org.mozilla.javascript.internal.Parser.memberExpr(Parser.java:2459)
at sun.org.mozilla.javascript.internal.Parser.unaryExpr(Parser.java:2369)
at sun.org.mozilla.javascript.internal.Parser.mulExpr(Parser.java:2292)
at sun.org.mozilla.javascript.internal.Parser.addExpr(Parser.java:2274)
at sun.org.mozilla.javascript.internal.Parser.shiftExpr(Parser.java:2253)
at sun.org.mozilla.javascript.internal.Parser.relExpr(Parser.java:2226)
at sun.org.mozilla.javascript.internal.Parser.eqExpr(Parser.java:2196)
at sun.org.mozilla.javascript.internal.Parser.bitAndExpr(Parser.java:2183)
at sun.org.mozilla.javascript.internal.Parser.bitXorExpr(Parser.java:2170)
at sun.org.mozilla.javascript.internal.Parser.bitOrExpr(Parser.java:2157)
at sun.org.mozilla.javascript.internal.Parser.andExpr(Parser.java:2144)
at sun.org.mozilla.javascript.internal.Parser.orExpr(Parser.java:2131)
at sun.org.mozilla.javascript.internal.Parser.condExpr(Parser.java:2107)
at sun.org.mozilla.javascript.internal.Parser.assignExpr(Parser.java:2076)
at sun.org.mozilla.javascript.internal.Parser.expr(Parser.java:2053)
at sun.org.mozilla.javascript.internal.Parser.parenExpr(Parser.java:2875)
at sun.org.mozilla.javascript.internal.Parser.primaryExpr(Parser.java:2810)
at sun.org.mozilla.javascript.internal.Parser.memberExpr(Parser.java:2459)
at sun.org.mozilla.javascript.internal.Parser.unaryExpr(Parser.java:2369)
at sun.org.mozilla.javascript.internal.Parser.mulExpr(Parser.java:2292)
at sun.org.mozilla.javascript.internal.Parser.addExpr(Parser.java:2274)
at sun.org.mozilla.javascript.internal.Parser.shiftExpr(Parser.java:2253)
at sun.org.mozilla.javascript.internal.Parser.relExpr(Parser.java:2226)
at sun.org.mozilla.javascript.internal.Parser.eqExpr(Parser.java:2196)
at sun.org.mozilla.javascript.internal.Parser.bitAndExpr(Parser.java:2183)
at sun.org.mozilla.javascript.internal.Parser.bitXorExpr(Parser.java:2170)
at sun.org.mozilla.javascript.internal.Parser.bitOrExpr(Parser.java:2157)
at sun.org.mozilla.javascript.internal.Parser.andExpr(Parser.java:2144)
at sun.org.mozilla.javascript.internal.Parser.orExpr(Parser.java:2131)
at sun.org.mozilla.javascript.internal.Parser.condExpr(Parser.java:2107)
at sun.org.mozilla.javascript.internal.Parser.assignExpr(Parser.java:2076)
at sun.org.mozilla.javascript.internal.Parser.expr(Parser.java:2053)
at sun.org.mozilla.javascript.internal.Parser.statementHelper(Parser.java:1082)
at sun.org.mozilla.javascript.internal.Parser.statement(Parser.java:944)
at sun.org.mozilla.javascript.internal.Parser.parse(Parser.java:569)
at sun.org.mozilla.javascript.internal.Parser.parse(Parser.java:531)
at sun.org.mozilla.javascript.internal.Context.compileImpl(Context.java:2428)
at sun.org.mozilla.javascript.internal.Context.compileReader(Context.java:1345)
at sun.org.mozilla.javascript.internal.Context.compileReader(Context.java:1317)
at sun.org.mozilla.javascript.internal.Context.evaluateReader(Context.java:1156)
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:214)
... 80 more
Poderia dar uma ajuda aí?
O teste tá da seguinte maneira:
private boolean formulaAvalMediaFinalVerdadeira() {
Pattern p = Pattern.compile("(\\d|[+*/().-]|n[te]\\D+|np\\d+|\\s+)*");
Matcher m = p.matcher(crudObj.getFormulAvalMediaFinal());
return m.matches();
}
public boolean verificaCoerenciaFormulFinal() throws ScriptException {
String formulaFinal = crudObj.getFormulAvalMediaFinal();
String REGEX = "(n[te]|np\\d)";
StringBuffer novaFormulaFinal = new StringBuffer();
Matcher buscador = Pattern.compile(REGEX).matcher(formulaFinal);
while (buscador.find()) {
buscador.appendReplacement(novaFormulaFinal, "10.0");
}
buscador.appendTail(novaFormulaFinal);
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("javascript");
Bindings bindings = scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE);
Object resultadoFinal = scriptEngine.eval(novaFormulaFinal.toString());
if (resultadoFinal != null) {
return true;
} else {
return false;
}
}
Se puder ajudar, agradeço mto…Vlwww