Введение определенного порядка символов в пароле делает его относительно более предсказуемым, а значит, теряет его силу, и я предлагаю вам обойтись без этого ограничения.Тем не менее, вы можете использовать это регулярное выражение, которое будет соответствовать вашим потребностям,
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*])[a-zA-Z][a-zA-Z\d]*[~!@#$%^&*?<>]*$
Объяснение:
^
-> Начало строки (?=.*[a-z])
-> Гарантирует, что пароль содержит хотя бы одну строчную букву. (?=.*[A-Z])
-> Гарантирует, что пароль имеет хотя бы одну заглавную букву. (?=.*\d)
-> Гарантирует, что пароль содержит хотя бы одну цифру. (?=.*[~!@#$%^&*])
-> Гарантирует, что пароль содержит хотя бы один специальный символ из этого набора.Вы можете поместить больше символов внутрь, которые вы хотите считать особенными.
Теперь придет часть для обеспечения порядка.Как вы сказали, он должен начинаться с алфавита, поэтому нам нужен первый символ:
[a-zA-Z]
Тогда после него может быть алфавит или цифры, поэтому вы можете использовать
[a-zA-Z\d]*
Инаконец, вам нужны специальные символы, и с помощью этого выражения «В конце концов, должен быть специальный символ.» Я предполагаю, что вы не хотите ограничивать его одним единственным специальным символом, следовательно, в концеregex это должно быть,
[~!@#$%^&*?<>]*
, которое может соответствовать одному или нескольким специальным символам.Если вы действительно имели в виду только один специальный символ, просто сделайте его [~!@#$%^&*?<>]
И, наконец, завершите его $
, чтобы прекратить сопоставлять строку.
Live Demo
Надеюсь, это работает для вас.Или же, дайте мне знать для любых других запросов.
Редактировать
Бонус: Если вы хотите проверить длинутакже вы можете сделать это, используя следующее:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*])(?=.{6,18}$)[a-zA-Z][a-zA-Z\d]*[~!@#$%^&*?<>]*$
Дополнительный (?=.{6,18}$)
должен гарантировать, что ваше регулярное выражение имеет длину от 6 до 18.
@ Pushpesh, пожалуйста, исправьте, если неправильно.