Это может быть сделано в одном регулярном выражении:
^(?!.*(.).*\1)[1-7]{0,7}$
Предварительное утверждение проверяет, что все символы в строке уникальны, и фактическое регулярное выражение допускает только 0-7 цифр между 1 и 7.
В Java:
boolean foundMatch = subjectString.matches("^(?!.*(.).*\\1)[1-7]{0,7}$");
Конечно, вы можете ускорить провал в ожидании, заменив каждый .
на [1-7]
, но для ясности я решил этого не делать.(И вы можете отбросить якоря ^
и $
, если используете метод .matches()
, поскольку в этом случае они неявны).