在 1 中组合 2 个或多个正则表达式
Posted
技术标签:
【中文标题】在 1 中组合 2 个或多个正则表达式【英文标题】:Combine 2 or more regex in 1 【发布时间】:2020-05-21 01:57:53 【问题描述】:我有 2 个正则表达式:
string regex1 = "(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$)";
这将检查给定字符串中的“admin”子字符串,并且不区分大小写。
string regex2 = "^[^<>?]5,100$";
这将检查特殊字符(^?) 和 5 到 100 之间的长度。
我想要一个正则表达式,其中两个正则表达式都可以使用一个正则表达式同时验证。
前-
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="txtBox1" ErrorMessage="Validation Failed!"
ValidationExpression="(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$)">
</asp:RegularExpressionValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server"
ControlToValidate="txtBox2" ErrorMessage="Length Validation Failed!"
ValidationExpression="^[^<>?]5,100$">
</asp:RegularExpressionValidator>
问。我们能否有一个“RegularExpressionValidator”同时提供上述功能?
【问题讨论】:
请检查:***.com/questions/869809/combine-regexp 感谢 ycansener,甚至您的提及链接也在为我学习。 【参考方案1】:(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$)
正则表达式太多余,它等于(?i)^(?!^.*?admin).*$
。它基本上匹配任何不包含admin
子字符串的字符串。
^[^<>?]5,100$
正则表达式不允许在字符串中使用<
、>
和?
,并设置字符串长度限制。
通过将第一个模式中的 .*
替换为第二个正则表达式 ([^<>?]5,100
) 的消耗部分来完成两者的结合:
(?i)^(?!^.*?admin)[^<>?]5,100$
详情
(?i)
- 不区分大小写模式开启
^
- 字符串开头
(?!^.*?admin)
- 不允许 admin
子字符串在 0 个或多个字符(换行符除外)之后的任何位置,尽可能少
[^<>?]5,100
- 除了<
、>
和 ?
之外的五到一百个字符
$
- 字符串结束。
【讨论】:
非常感谢 Wiktor Stribiżew,我只是复制了您的答案,它按预期工作:) @Bit2Dev 另见the regex demo online。 嘿@Wiktor Stribiżew,我发现了 1 个问题,上面提到的正则表达式 (?i)^(?!^.*?admin)[^?]5,100$ 在我的 POC,但如果放入所需的项目中,它会在 WebResource.axd 文件中引发错误。 @Bit2Dev 答案中的模式将在服务器端工作,它不会在客户端工作,因为 JS RegExp 不支持内联修饰符。您必须删除(?i)
并使用 ^(?!^.*?[Aa][Dd][Mm][Ii][Nn])[^<>?]5,100$
以上是关于在 1 中组合 2 个或多个正则表达式的主要内容,如果未能解决你的问题,请参考以下文章