ASP.net核心RegularException属性-多个条件

时间:2019-05-05 13:41:50

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

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

"^[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).*)应该不是。

如何正确处理?

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以通过将第二个正则表达式放在 negative look ahead 中来使用它,并将第一个正则表达式用作字符集,并结合使用两者来获得可使用的正则表达式,

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

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

此外,在字符集中的大多数特殊字符都不需要转义,因此除/之外,我大部分都没有转义,并且总是将连字符-放在最前面字符集中的第一个字符或最后一个字符,否则取决于正则表达式的方言,您可能会看到奇怪的行为。

Regex Demo