javascript - 基于 ScriptEngine 'javascript' 进行不正确的正则表达式验证(对于 IP 地址)

标签 javascript java scriptengine javascript-engine

尽管正则表达式是正确的,并且在基于节点的 .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/

相关文章:

javascript - onclick,点击不起作用? jQuery

javascript - 通过边缘调整元素 (li) 的大小

javascript - 立即调用的函数表达式抛出 "object is not a function"

java - Java 中是否有任何方法可以按步骤 1 或其他长度初始化一个集合?

c# - 如何限制从 Roslyn 脚本引擎访问程序集中的成员?

java - 如何使用 Java ScriptEngine 创建 Javascript 函数

javascript - 如何使用 underscore.js 或 jquery 删除模式

java - 如果java中的变量发生变化,如何退出函数? (重启服务器)

java - 具有公钥的 RSA 签名作为未在 java 中验证的文本

java - ScriptEngineManager 特别谨慎的异常处理