正则表达式中的有效格式问题
Posted
技术标签:
【中文标题】正则表达式中的有效格式问题【英文标题】: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
【问题讨论】:
【参考方案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 这也可以吗? 请浏览正则表达式演示以获得进一步的更改。你从来没有告诉我们这个正面案例,所以我不会第三次编辑我的答案。 如果您想查看,我已经更新了问题。谢谢以上是关于正则表达式中的有效格式问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式仅捕获具有特定格式的有效句子的第一个单词? [复制]