【问题标题】:Combine 2 or more regex in 1在 1 中组合 2 个或多个正则表达式
【发布时间】:2020-05-21 01:57:53
【问题描述】:

我有 2 个正则表达式:

  1. string regex1 = "(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$)"; 这将检查给定字符串中的“admin”子字符串,并且不区分大小写。

  2. 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”同时提供上述功能?

【问题讨论】:

标签: c# asp.net regex


【解决方案1】:

(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$) 正则表达式太多余,它等于(?i)^(?!^.*?admin).*$。它基本上匹配任何不包含admin 子字符串的字符串。

^[^&lt;&gt;?]{5,100}$ 正则表达式不允许在字符串中使用&lt;&gt;?,并设置字符串长度限制。

通过将第一个模式中的 .* 替换为第二个正则表达式 ([^&lt;&gt;?]{5,100}) 的消耗部分来完成两者的结合:

(?i)^(?!^.*?admin)[^<>?]{5,100}$

详情

  • (?i) - 不区分大小写模式开启
  • ^ - 字符串开头
  • (?!^.*?admin) - 不允许 admin 子字符串在 0 个或多个字符(换行符除外)之后的任何位置,尽可能少
  • [^&lt;&gt;?]{5,100} - 除了&lt;&gt;? 之外的五到一百个字符
  • $ - 字符串结束。

【讨论】:

  • 非常感谢 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])[^&lt;&gt;?]{5,100}$
猜你喜欢
  • 1970-01-01
  • 2020-01-29
  • 2021-11-19
  • 2018-06-16
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多