2017-01-26 3 views
-1

В настоящее время я иметь следующую закономерность: регулярокрегулярное выражение модели в нижнем регистре и верхнем регистре и номер или специальный символ

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

, который является по меньшей мере один в нижнем регистре, один верхний регистр, один номер и один специальный символ. Как я могу сделать специальные символы факультативно?

+0

Не могли бы вы показать нам примеры входных строк и связанных с ними ожидаемых выходов? – Niitaku

+0

Кстати, дублированный '' 'в вашем списке специальных символов является избыточным. Вы можете использовать '[$ @!% *? &]' И '[A-Za-z \ d $ @!% *? &]' –

ответ

0

Похоже, все, что вам нужно, это ? после [[email protected]$!%*?&]

Ваше регулярное выражение должно быть ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[email protected]$!%*?&]?)[A-Za-z\[email protected]$!%*?&]{8,}

https://regex101.com/r/1V8Xsq/1

+1

'(? =. * [$ @ $!% *? &] ?) 'можно сократить до. (То есть, ничего.) – melpomene

+0

@melpomene Согласен. Все '(? =. * [$ @ $!% *? &])' Можно удалить, так как это положительный взгляд, который теперь является необязательным. '. *' не может ничего совпадать, а '[$ @ $!% *? &]?' не может ничего сопоставлять, поэтому весь вид выглядит как бессмысленный '(? =. *)'. Хорошая точка зрения. –

1

Как я могу сделать специальные символы факультативный?

Просто удалите предпросмотр для проверки специального полукокса:

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

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

+0

@someangular: Это сработало? – anubhava

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