分布式的今天,如何保证前端的正则与后端始终保持如一,一直困扰大家的难题。
这里的解决方法:使用javascript引擎
1. 怎样判断是合法的正则表达式
java语言一侧调用javascript引擎
public static boolean isRegex(String regex) {
var ret = false;
javax.script.ScriptEngineManager se = new javax.script.ScriptEngineManager();
javax.script.ScriptEngine engine = se.getEngineByName("js");
engine.put("rgx", regex);
try {
ret = (boolean) engine.eval(
"var isreg;try{isreg=eval(rgx) instanceof RegExp}catch(e){isreg=false}");
} catch (ScriptException e) {
ret = false;
}
return ret;
}
2. 怎样用正则表达式验证输入
java语言一侧调用javascript引擎
public static boolean matches(String regex,String val) {
var value = false;
javax.script.ScriptEngineManager se = new javax.script.ScriptEngineManager();
javax.script.ScriptEngine engine = se.getEngineByName("js");
String regExp = regex;
engine.put("str", val);
try {
engine.eval("var rgx=" + regExp);
value = (boolean) engine.eval(
"function validate(r, s){ return (r).test(s);};validate(rgx, str);");
return value;
} catch (ScriptException e) {
throw new PatternSyntaxException(e.getMessage(),regex,e.getLineNumber());
}
}