Регулярное выражение в сценарии оболочки, если условие не работает

Регулярное выражение в условии if для проверки пароля. Условия следующие:

  1. Длина пароля должна быть больше 14
  2. Он должен содержать минимум 1 верхний регистр
  3. Он должен содержать минимум 1 нижний регистр
  4. Он должен содержать минимум 1 специальный символ.

Весь этот код должен быть написан в сценариях оболочки.

Помогите, пожалуйста. Код всегда печатается неправильно.

password="Testing@1234Test"
correct_password="^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}$"
if [[ $password =~ $correct_password ]]; then echo "correct" ; exit
else echo "wrong"
fi

Регулярное выражение Bash не поддерживает поисковые запросы, а это то, что вам действительно нужно для сложного регулярного выражения пароля. Так что, возможно, вам стоит заняться этим где-нибудь еще, например в таком приложении, как Java или C#.

Tim Biegeleisen 26.10.2018 09:28
1
1
90
1

Ответы 1

Попробуйте это:

[[ ${#a} -ge 14 && "$a" == *[A-Z]* && "$a" == *[a-z]* && "$a" == *[0-9]* && "$a" == *[@#$*%^\!]* ]]

Вам нужно добавить специальные символы в последнее условие в соответствии с вашими требованиями и обратите внимание, что некоторые специальные символы потребуют экранирования.

Следует отметить, что это глобализация, тогда как вопрос конкретно требует регулярного выражения (при условии, что OP знает разницу).

cdarke 26.10.2018 10:45

Да, точнее, мне нужно оценить это регулярное выражение в условии if, которое не работает в bash, хотя с регулярным выражением все в порядке.

Technocrat 26.10.2018 11:41

@Technocrat: Глобус, который я дал, не работает в условии if, или вы говорите о регулярном выражении, которое было опубликовано в предыдущем ответе?

Samarth 26.10.2018 13:14

@Samarth Я говорил о регулярном выражении, а не о глобусе, который был дан

Technocrat 26.10.2018 13:36

@Technocrat: в if в bash вы должны использовать [[ ]] (не [ ]) с =~ для регулярных выражений или с == для подстановки. В обоих случаях узор должен быть справа. Вы все это делаете? Пожалуйста, укажите свой код в вопросе.

cdarke 26.10.2018 14:51

Найдите прилагаемый к вопросу код, который не дает желаемого результата.

Technocrat 31.10.2018 06:42

Другие вопросы по теме