Мы можем попробовать использовать следующий шаблон регулярных выражений:
^(?!.*(.).*\1)[ABCDE]{0,5}$
Вот объяснение регулярного выражения:
^ from the start of the string
(?!.*(.).*\1) assert that the same letter does not repeat
[ABCDE]{0,5} then match 0-5 letters
$ end of the string
Пример PHP скрипт:
$input = "ABCDE";
if (preg_match("/^(?!.*(.).*\1)[ABCDE]{0,5}$/", $input)) {
echo "MATCH";
}
Отрицательный взгляд (?!.*(.).*\1)
работает, проверяя, может ли он захватить какую-то одну букву, а затем снова находит ее в строке. Давайте возьмем недопустимый ввод ОП DAA
. Вышеуказанный негативный прогноз потерпит неудачу, когда он совпадет с , а захватит первый A
, а затем увидит его снова. Обратите внимание, что у обходных путей могут быть свои собственные группы захвата.