2016-06-17 4 views
0

Я пытаюсь создать регулярное выражение для проверки паролей. Мой текущий один проверяет следующее:Почему мои необязательные символы не попадают?

  • Один Прописные Письмо
  • Один строчных букв
  • Один номер

В настоящее время пользователь не может вводить специальные символы, но я пытаюсь чтобы добавить это как дополнительную проверку (так что Testing1 и Testing1! должны совпадать). Я пробовал:

^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&])(A-Za-z\d[[email protected]$!%*#?&]?){8,}$

Но это не поймать его. Я чувствую, что мой специальный набор символов находится в неправильном месте, но я не уверен, где его разместить.

Где я могу добавить свой список специальных символов в качестве дополнительных проверок?

+2

Является ли ваш второй '$ @ $!% * #? &' Предположительным классом символов? – chris85

+0

Да. Вклеена старая команда по ошибке. – BDD

+0

Я думаю, что вы можете разрешить что угодно с '.':'^(? =. * [AZ]) (? =. * [Az]) (? =. * [0-9]) (? =. * [$ @ $!% * #? &]). {8,} $ ', но для этого требуется один из специальных символов. Если вы используете '[A-Za-z0-9 $ @ $!% * #? &] {8,}', вы не сможете ввести «' '' '. –

ответ

3

Существует множество способов настроить ваше регулярное выражение, например, создание белого списка или черного списка для типов символов. Это, в частности, создает белый список для символов, которые могут быть использованы, которые, кажется, являются тем, что вы ищете.

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[[email protected]$!%*#?&]{8,}$ 

Regex Разбивка:

^ // Assert position at start of the line 
(?=.*[A-Z]) // First positive lookahead, makes sure a capital character exists 
(?=.*[a-z]) // Make sure a lowercase character exists 
(?=.*[0-9]) // Make sure a number exists 
[[email protected]$!%*#?&] // All of the possible characters that can be typed 
{8,} // 8 to infinity characters 
$ // Assert position at end of line 

Так вы говорите, что вы хотите, специальные символы, как по желанию, они просто помещаются в возможных символов, которые могут быть набраны, но они не подтверждены любым положительные взгляды.

См. Это регулярное выражение в действии на regex101. Имейте в виду, что модификаторы gm должны проверять строки в этом примере и, вероятно, должны быть удалены в вашем случае использования.

Конечно, у вас могут быть причины для «белого списка», но более общий подход, и один из них, который вы можете захотеть задуматься, - это разрешить почти все (черный список), а затем подтвердить, что определенные критерии выполняется.

+0

Значит, мне не нужно определять эти символы как их собственную необязательную группу? Я могу просто положить их в свой набор символов? – BDD

+0

@BDD, это правильно. Эта часть регулярного выражения: '[A-Za-z0-9 $ @ $!% * #? &] {8,}' - это часть, которая определяет, что можно ввести. Что между '[' и ']' определяет «возможные» символы, но не обязательные символы. – KevBot

+0

Отлично. Спасибо за разъяснения! – BDD

Смежные вопросы