正则表达式中的有效格式问题

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 这也可以吗? 请浏览正则表达式演示以获得进一步的更改。你从来没有告诉我们这个正面案例,所以我不会第三次编辑我的答案。 如果您想查看,我已经更新了问题。谢谢

以上是关于正则表达式中的有效格式问题的主要内容,如果未能解决你的问题,请参考以下文章

匹配所有有效格式 IPv6 地址的正则表达式

如何使用正则表达式仅捕获具有特定格式的有效句子的第一个单词? [复制]

一个正则表达式中的多个表达式

检查正则表达式是不是通过正则表达式有效

如何编写一个正则表达式命令在 python 中将字符串转换为日期时间格式?

Java中使用正则检查有效日期