Как проверить повторение символов в строке - PullRequest
2 голосов
/ 29 августа 2011

Мне нужно проверить строку, которая может содержать числа от 1 до 7, и максимально допустимая длина равна 7.

([1-7]){0,7}

Условие: никакие числа не должны повторяться в строке.

Например:

12345  true;
11345  false  (1 is repeated) ;
98014  false  (0,8,9 are invalid); 

Ответы [ 3 ]

3 голосов
/ 29 августа 2011

Это может быть сделано в одном регулярном выражении:

^(?!.*(.).*\1)[1-7]{0,7}$

Предварительное утверждение проверяет, что все символы в строке уникальны, и фактическое регулярное выражение допускает только 0-7 цифр между 1 и 7.

В Java:

boolean foundMatch = subjectString.matches("^(?!.*(.).*\\1)[1-7]{0,7}$");

Конечно, вы можете ускорить провал в ожидании, заменив каждый . на [1-7], но для ясности я решил этого не делать.(И вы можете отбросить якоря ^ и $, если используете метод .matches(), поскольку в этом случае они неявны).

2 голосов
/ 29 августа 2011

Я думаю, вам нужно использовать два выражения.Один для проверки длины и цифр:

/^[1-7]{0,7}$/

и один для проверки, повторяется ли цифра

/(\d).*\1/

\1 - это ссылка на значение первой группы захвата.

Используя комбинацию обоих, вы можете проверить строку.Пример в JavaScript:

< /^[1-7]{0,7}$/.test(12345) && !/(\d).*\1/.test(12345)
> true
--
< /^[1-7]{0,7}$/.test(11345) && !/(\d).*\1/.test(11345)
> false
1 голос
/ 29 августа 2011

Вы можете отменить проверку, т. Е. Если она соответствует [^1-7]|.{8}|(.).*\1, то она недействительна.

...