首页 > 解决方案 > ASP.net 核心 RegularException 属性 - 多个条件

问题描述

我有两个应该匹配的正则表达式:

"^[a-z0-9\\!@\\$\\^&\\-\\+%\\=_\\(\\)\\{\\}\\<\\>'\";\\:/\\.,~`\\|\\\\]+$"

".*(g[o0]+gle).*"

第一个接受任何字母数字字符(还有一些额外的字符)。喜欢helloworld123。第二个应该拒绝任何包含单词“google”的字符串(以不同的形式 - 比如:)gooo0gle

允许:

hello
helloworld
helloworld123

不允许:

hellogoogle
google
...

我想用RegularExpression来匹配这个字符串。想到了类似的东西:

[RegularExpression("^[a-z0-9\\!@\\$\\^&\\-\\+%\\=_\\(\\)\\{\\}\\<\\>'\";\\:/\\.,~`\\|\\\\]+$|.*(g[o0]+gle).*"]

但它不起作用,因为第二部分 ( .*(g[o0]+gle).*) 不应该。

怎么做才对?

谢谢。

标签: c#asp.netregexasp.net-core

解决方案


您可以使用您的第二个正则表达式,将其置于否定的前面,并将第一个正则表达式用作字符集并将两者结合以获得您可以使用的以下正则表达式,

^(?!.*g[o0]+gle)[-a-z0-9!@$^&+%=_(){}<>'";:\/.,~`|]+$

在这里,这种(?!.*g[o0]+gle)否定的前瞻性将拒绝任何包含google正则表达式支持的字符串或任何变体,并且此字符集[-a-z0-9!@$^&+%=_(){}<>'";:\/.,~|]+` 将匹配它允许的一个或多个字符。

此外,您不需要在字符集中转义大多数特殊字符,因此我对它们中的大多数进行了转义,除了/并且始终将连字符-作为字符集中的第一个字符或最后一个字符,否则取决于在正则表达式方言中,您可能会看到奇怪的行为。

正则表达式演示


推荐阅读