Существует "элегантный" способ сделать это с помощью одного регулярного выражения:
^(?:2()|3()|4()|5()){4}\1\2\3\4$
будет соответствовать цифрам 2, 3, 4 и 5 в любом порядке. Все четыре обязательны.
Пояснение:
(?:2()|3()|4()|5())
соответствует одному из чисел 2, 3, 4 или 5. Хитрость заключается в том, что в скобках для захвата соответствует пустая строка после совпадения с числом (которое всегда выполняется). *
{4}
требует, чтобы это происходило четыре раза.
\1\2\3\4
затем требует, чтобы все четыре обратных ссылки приняли участие в матче - что они и делают, если и только если каждое число встречалось один раз. Поскольку \1\2\3\4
соответствует пустой строке, она всегда будет соответствовать до тех пор, пока выполняется предыдущее условие.
Для пяти цифр вам понадобится
^(?:2()|3()|4()|5()|6()){5}\1\2\3\4\5$
и т.д ...
Это будет работать практически с любым видом регулярных выражений, кроме JavaScript.