【问题标题】:Issue in regex for a valid format正则表达式中的有效格式问题
【发布时间】:2021-06-02 23:01:42
【问题描述】:

我正在使用正则表达式模式匹配添加对字符串的限制,但它不起作用,因为我在正则表达式方面没有太多经验。 就像不可能没有(没有)或[没有]。

abc.(%      -->false
abc.)%      -->false
abc.(%]     -->false
abc.)%]     -->false
1abc9.(%[   -->false
abc.)%[     -->false
abc.(%(     -->false
abc.)%)     -->false
19.(%)%     -->true
19.[%]%     -->true
2009% --> true
19.1245 -- true 
10.[5-9]% -- true
/^[^\s\[\]^$.|A-Z]*(?:(?:\[[^\s\[\]\\]+](?!\])|%[^\r\n\?\$\*\.\[\+\(\)\]\.\^%]+%(?=\||$)|\|[^\s\[\]^A-Z\\]+)[^\s\[\]^$.|?*+()A-Z\\]*)*$/

The string is fine if it have start with ( and end with )
19[1-3] is fine
2014.56(core) is fine

【问题讨论】:

    标签: javascript regex regexp-replace


    【解决方案1】:

    我可能会使用允许的白名单来解决此问题,而不是试图四处奔波并涵盖所有负面情况。也就是说,使用以下正则表达式模式:

    ^\S+\.(?:(?:\(%\)|\[%\])%?)?$
    

    Demo

    一些JS代码:

    var valid = "19.(%)";
    if (/^\S+\.(?:(?:\(%\)|\[%\])%?)?$/.test(valid)) {
        console.log("VALID:   " + valid);
    }
    
    var invalid = "abc.(%";
    if (!/^\S+\.(?:(?:\(%\)|\[%\])%?)?$/.test(invalid)) {
        console.log("INVALID: " + invalid);
    }

    【讨论】:

    • "19.(%)", 19(%) 这些也需要有效,但不是。你能帮帮我吗
    • 如果可能,最后一次修改。 19.12345 , 19.dada 这也可以吗?
    • 请浏览正则表达式演示以获得进一步的更改。你从来没有告诉我们这个正面案例,所以我不会第三次编辑我的答案。
    • 如果您想查看,我已经更新了问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多