尽管正则表达式是正确的,并且在基于节点的 .js 代码运行中给出了正确的结果,但以下正则表达式为 IP 地址验证 rvrn 提供了错误的结果。
public static void excuteWithinEngine() throws ScriptException{
// ip address regex
String regEx = "^(?:\\d|1?\\d\\d|2[0-4]\\d|25[0-5])(?:\\.(?:\\d|1?\\d\\d|2[0-4]\\d|25[0-5])){3}$";
Set<String> in=new HashSet<String>();
//IPv4 A:B:C:D. if more than one chars are at position B,C then jsvascript based regex-test fails
in.add("10.2.2.2");//output: true. (correct result)
in.add("10.2.13.2");//output: false. (incorrect result)
in.add("10.2.13.25");//output: false. (incorrect result)
in.add("10.2.2.25");//output: true. (correct result)
for(String input:in){
String s = input;
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine se = factory.getEngineByName("JavaScript");
se.put("regEx", regEx);
se.put("string", s);
se.eval("var RE = new RegExp(regEx);");
boolean b= (boolean)se.eval("RE.test(string);"); // test function
System.out.println("Testing "+s+" :"+b);
}
}
最佳答案
可以打印错误日志吗?让我知道它说什么!
另外,尝试使用以下正则表达式:
var ipv4rgx = @"^((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.|$)){4}";
var ipv6rgx = "^([0-9a-fA-F]{1,4}(:|$)){8}";
关于javascript - 基于 ScriptEngine 'javascript' 进行不正确的正则表达式验证(对于 IP 地址),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48742708/