正则表达式:java和javascript各自不同处理方式对应

585 阅读1分钟

分布式的今天,如何保证前端的正则与后端始终保持如一,一直困扰大家的难题。

这里的解决方法:使用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());
		}
	}