Как запретить повторные символы с использованием регулярного выражения

Вопрос: Как запретить повторные символы, используя регулярное выражение? Это регулярное выражение не должно допускать 1--234567890 1--2345--1212 Однако верно следующее 1-2-3-4-5-6-7-8-9-0 1234567890 Единственное беспокойство здесь - минус, который нельзя вводить друг за другом, поэтому -- не должен совпадать Нет ограничений в том, сколько тире в строке. Я использую С# Заранее спасибо Лучший ответ: Используйте отрицательный lookahead:

Вопрос:

Как запретить повторные символы, используя регулярное выражение?

Это регулярное выражение не должно допускать

1—234567890 1—2345—1212

Однако верно следующее

1-2-3-4-5-6-7-8-9-0 1234567890

Единственное беспокойство здесь – минус, который нельзя вводить друг за другом, поэтому — не должен совпадать

Нет ограничений в том, сколько тире в строке. Я использую С#

Заранее спасибо

Лучший ответ:

Используйте отрицательный lookahead: ^((.)(?!2))+$ будет соответствовать строке без повторных символов.

Альтернативно – потенциально быстрее: выполните поиск (.)1 который будет соответствовать паре повторяющихся символов.

Ответ №1

Это будет соответствовать любой паре одинаковых символов:

«(.)1»

Альтернативно, для словных символов:

«(w)1»

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

Обновить:

Теперь, когда вы выяснили, что только — это то, что вам нужно, чтобы найти, вот еще один вариант:

«—»

Конечно, вы можете просто использовать Contains(«—«) в строке в таком случае.

Ответ №2

Если тире – единственный персонаж, которого вы волнуете:

// this regular expression is «inexact», three dashes always has two dashes, etc var bad = new Regex(«—«); if (bad.IsMatch(input)) { throw new ArgumentException(«Not a valid format», «input»); }

Или гораздо проще:

// regular expression? no need if (input.Contains(«—«)) { throw new ArgumentException(«Not a valid format», «input»); } Ответ №3

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

Оцените статью
Добавить комментарий