У меня есть требование к паролю с приведенными ниже требованиями, все из которых выполнены, за исключением повторяющихся слов/шаблонов.
Это мое регулярное выражение, которое выполняет все требования, кроме последнего (повторяющегося шаблона).
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[.,!@#$%^+=_])(?!.*(.)\1).{8,20}$
Есть ли способ решить эту проблему в рамках вышеприведенного регулярного выражения?
...(?!.*(.{3,}).*\2)...
?
Вы нашли регулярное выражение, которое самостоятельно выполняет эту проверку?
Возможно вот так? ^(?=[^\d\s]*\d)(?=[^\sa-z]*[a-z])(?=[^\sA-Z]*[A-Z])(?=[^\s.,!@#$%^+=_]*[.,!@#$%^+=_])(?!.*(\S)\1)(?!.*(\S{2,})\S*\2)\S{8,20}$
См. regex101.com/r/BTEWBh/1
[a-z]
- на дворе 2024 год, а пароли по-прежнему ограничены только ASCII? Благодаря этому их гораздо легче взломать.
Это требование настолько абсурдно, что создается впечатление, что это троллинг...
«Никаких повторяющихся слов и узоров»: чем отличается слово от узора? Есть ли у вас точное определение этих терминов в данном контексте? Если xyz
такое слово, то является ли x
таким же словом? Не означает ли это, что все персонажи должны быть уникальными?
@Thefourthbird, твое регулярное выражение на высоте. Оно работает. Возможно, вы можете преобразовать его в ответ (предоставив несколько примеров строк).
Обновите шаблон регулярного выражения, состоящий из повторяющихся букв (\w
) или цифр (\d
), следующим образом:
/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[.,!@#$%^+=_])(?!.*(.)\1)(?![\w\d]\1).{8,20}$/gm
https://regex101.com/r/uMQyZA/1
Спасибо, но он не соответствует требованиям к повторяющимся словам/шаблонам, если выполняются другие требования. Например, если ProPersonPro заканчивается на 1! тогда оно примет это. См. комментарий @TheFourthBird выше.
Я обновил шаблон регулярного выражения. Пожалуйста, проверьте один раз @programmerboy
Все еще не работает так, как ожидалось. В приведенной выше ссылке на регулярное выражение можно найти повторяющиеся шаблоны, такие как ProPersonPro1@ и xyzxyz@1ABC RegEx, предоставленные @Thefourthbird, работает!
Предполагая, что ваш пароль не должен содержать пробелов, вы можете использовать \S
для соответствия символам без пробелов вместо точки.
^(?=[^\d\s]*\d)(?=[^\sa-z]*[a-z])(?=[^\sA-Z]*[A-Z])(?=[^\s.,!@#$%^+=_]*[.,!@#$%^+=_])(?!\S*(\S)\1)(?!\S*(\S{2})\S*\2)\S{8,20}$
Узор соответствует:
^
Начало строки(?=[^\d\s]*\d)
Укажите цифру справа, используя отрицательный класс символов, чтобы соответствовать необязательным символам без пробелов, исключая сначала цифру.(?=[^\sa-z]*[a-z])
Тот же механизм для символов a-z.(?=[^\sA-Z]*[A-Z])
То же самое для персонажа от А до Я.(?=[^\s.,!@#$%^+=_]*[.,!@#$%^+=_])
А также для персонажа, которого вы считаете особенным(?!\S*(\S)\1)
Утвердить, что справа нет двух последовательных одинаковых символов без пробелов.(?!\S*(\S{2})\S*\2)
Утвердить, что справа нет последовательности из двух одинаковых символов без пробелов (разделенных между ними необязательными символами без пробелов).\S{8,20}
$
Конец строкиПосмотрите демонстрацию регулярных выражений
A8&x^3@UiA8&x^3@UiA8&x^3@Ui
должно потерпеть неудачу. Это повторяющийся узор.