2015-06-09 2 views
-2

Привет, у меня есть поле, в котором пользователь может ввести строку с ограниченным набором токенов, скажем {token1}, {token2}. Токен - это строка между фигурными фигурными скобками, без пробелов.Регулярное выделение недействительных токенов

Я хочу, чтобы запись пользователя, проверенная с регулярным выражением, недействительна, когда пользователь вводит какой-либо неизвестный/недействительный токен. Обратите внимание, что пользователь может также не вводить токен вообще.

Допустимые значения:

  • qwert yuiop
  • qwert{token1}yuiop
  • qwert{token1}{token2}yuiop
  • qwert {token1} {token2} yuiop

недействительные записи:

  • qwert {badtoken} yuiop
  • qwert { badtoken} yuiop
  • qwert {badtoken } yuiop
  • qwert { token1} yuiop
  • qwert {token1 } yuiop
  • qwert { token1 } yuiop
  • qwert {badtoken} {token1} yuiop

Намерение-накрест, сообщение пользователю будет сказать:

Ввод содержит неизвестные жетоны. Разрешены только {token1} и {token2}.

+2

Какой язык вы используете, JS? Что вы пробовали? – chris85

+0

Я использую .net. –

ответ

1

Я думаю, что это то, что вы ищете:

\{(?!token[12]\}).*?\} 

Часть, что большинство людей не думают о в подобных случаях являются в то числе окончания распорки (\}) в отрицательном предпросмотре , чтобы предотвратить совпадение таких вещей, как {token1 } или {token2xxxx}.

Конечно, это не определяет токены с отсутствующими фигурными скобками, например {token1 или token2}. Это было бы намного сложнее.

Это регулярное выражение будет работать в любом вкусе, который поддерживает взгляды и неохотные кванторы. Вот demo.

Обновление: Per запроса в комментариях, вот произносимая версия (как вы бы использовать для имен лексем, которые не могут быть легко сгущенными):

\{(?!(?:token1|token2)\}).*?\} 

... и обновлено demo.

+0

Алан вы можете дать мне регулярное выражение с прописанными жетонами. Я проверю это в ближайшее время. –

+0

Большое спасибо, отлично работает. –

+0

Алан еще одна вещь, я чего-то не хватает. Мне нужно использовать это с помощью IsMatch, и он должен выглядеть следующим образом: - нет токенов или всех действительных токенов, IsMatch должен возвращать true, - плохие токены, IsMatch должен возвращать false Причина: я использую это для проверки в системе cms, которая, по-видимому, ожидает результатов bool. –

Смежные вопросы