首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ScriptEngine的“javascript”进行了不正确的正则表达式验证(针对IP地址)

问基于ScriptEngine的“javascript”进行了不正确的正则表达式验证(针对IP地址)
EN

Stack Overflow用户
提问于 2018-02-12 17:03:26
回答 2查看 164关注 0票数 1

虽然正则表达式是正确的,但是下面的正则表达式为ip地址验证rvrn提供了错误的结果,并且在基于节点的.js代码运行中给出了正确的结果。

代码语言:javascript
复制
    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); 

    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-02-12 17:25:27

你能打印错误日志吗?让我知道它说了什么!

另外,尝试使用以下正则表达式:

代码语言:javascript
复制
var ipv4rgx = @"^((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.|$)){4}";
var ipv6rgx = "^([0-9a-fA-F]{1,4}(:|$)){8}";
票数 0
EN

Stack Overflow用户

发布于 2018-02-12 19:32:49

我不能告诉你为什么会发生这种情况,但它似乎与使用时间修饰符{3}有关。如果将正则表达式更改为

代码语言:javascript
复制
"^(?:\\d|1?\\d\\d|2[0-4]\\d|25[0-5])(?:\\.(?:\\d|1?\\d\\d|2[0-4]\\d|25[0-5]))(?:\\.(?:\\d|1?\\d\\d|2[0-4]\\d|25[0-5]))(?:\\.(?:\\d|1?\\d\\d|2[0-4]\\d|25[0-5]))$"

(将最终的{3}扩展为三个显式表达式),那么它看起来就像预期的那样工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48742708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档