Основной атрибут Reg.netException в ASP.net - несколько условий - PullRequest
0 голосов
/ 05 мая 2019

У меня есть два регулярных выражения, которые должны быть сопоставлены:

"^[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 Ответ

2 голосов
/ 05 мая 2019

Вы можете использовать свое второе регулярное выражение, поместив его в отрицательный взгляд вперед и использовать первое регулярное выражение в качестве набора символов и объединить оба, чтобы получить следующее регулярное выражение, которое вы можете использовать,

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

Здесь этот (?!.*g[o0]+gle) отрицательный взгляд вперед отклонит любые строки, содержащие google или любой вариант, поддерживаемый вашим регулярным выражением, и этот набор символов [-a-z0-9!@$^&+%=_(){}<>'";:\/.,~ |] + `будет соответствовать одному или нескольким символам, разрешенным им .

Кроме того, вам не нужно экранировать большинство специальных символов, пока они находятся в наборе символов, поэтому я исключил большинство из них, кроме /, а также всегда ставлю дефис - либо в качестве самого первого символа, либо очень последний символ в наборе символов, иначе в зависимости от диалектов регулярных выражений, вы можете увидеть странное поведение.

Regex Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...