Я хочу, чтобы регулярное выражение проверяло это
пароль должен состоять из восьми символов, включая одну заглавную букву, один специальный символ и буквенно-цифровые символы.
А вот мое выражение проверки, которое предназначено для восьми символов, включая одну заглавную букву, одну строчную букву и одну цифру или специальный символ.
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
Как я могу написать это для пароля, который должен состоять из восьми символов, включая одну заглавную букву, один специальный символ и буквенно-цифровые символы?
Ответы:
Регулярное выражение, которое вам нужно, скорее всего, будет огромным и кошмаром, особенно для людей, которые не так хорошо знакомы с регулярными выражениями.
Я думаю, было бы проще сломать ваше регулярное выражение и делать это по частям. Это может занять немного больше времени, но я почти уверен, что поддерживать его и отлаживать будет проще. Это также позволит вам предоставлять более конкретные сообщения об ошибках вашим пользователям (не только
Invalid Password
), что должно улучшить взаимодействие с пользователем.Из того, что я вижу, вы довольно свободно владеете регулярными выражениями, поэтому я предполагаю, что давать вам регулярные выражения для выполнения того, что вам нужно, было бы бесполезно.
Увидев ваш комментарий, я бы сделал следующее:
Должен состоять из восьми символов. Длинный: для этого не требуется регулярное выражение.
.Length
Достаточно использовать собственность.Включая одну заглавную букву: вы можете использовать
[A-Z]+
регулярное выражение. Если строка содержит хотя бы одну заглавную букву, это регулярное выражение даст результатtrue
.Один специальный символ: вы можете использовать либо,
\W
который будет соответствовать любому символу, не являющемуся буквой или цифрой, либо вы можете использовать что-то подобное, чтобы[!@#]
указать собственный список специальных символов. Обратите внимание , однако , что такие символы, как$
,^
,(
и)
специальные символы в языке регулярных выражений, поэтому они должны быть экранированы , как так:\$
. Короче говоря, вы можете использовать расширение\W
.Буквенно-цифровые символы: использование символа
\w+
должно соответствовать любой букве, цифре и знаку подчеркивания.Взгляните на это руководство для получения дополнительной информации.
источник
В одной строке:
Изменить 2019-05-28:
Вам нужно сопоставить всю строку ввода. Таким образом, вы можете заключить регулярное выражение между
^
и,$
чтобы предотвратить случайное принятие частичных совпадений как совпадающих со всем вводом:Источники:
Выражение сопоставления пароля
Проверка надежности пароля с помощью регулярных выражений
источник
^
и$
. Попробуйте это:^((?=.*\d)(?=.*[A-Z])(?=.*\W).{8,8})$
Столько ответов .... все плохо!
Регулярные выражения не имеют оператора И, поэтому довольно сложно написать регулярное выражение, которое соответствует действительным паролям, когда действительность определяется чем-то И чем-то еще И чем-то еще ...
Но регулярные выражения делать есть оператор ИЛИ, так просто применить теорему де Морган, и написать регулярное выражение , которое соответствует недопустимым паролям.
что-либо, содержащее менее 8 символов, ИЛИ что-либо без цифр, ИЛИ что-либо без верхнего регистра ИЛИ что-либо без специальных символов
Так:
Если что-то соответствует этому, то это недействительный пароль.
источник
|.{9,}
. +1 за концепциюОтвет - не использовать регулярное выражение. Это наборы и подсчет.
Регулярные выражения говорят о порядке.
В вашей жизни как программиста вас попросят делать много бессмысленных вещей. Научитесь копать на уровень глубже. Узнай, когда вопрос неправильный.
Вопрос (упоминались ли регулярные выражения) неверен.
Псевдокод (в последнее время переключался между слишком большим количеством языков):
Спорим, вы прочитали и поняли приведенный выше код почти мгновенно. Спорим, вы потратили намного больше времени на регулярное выражение и менее уверены в его правильности. Расширять регулярное выражение рискованно. Расширенное непосредственно выше, тем более.
Обратите внимание, что вопрос сформулирован неточно. Это набор символов ASCII или Unicode, или ?? Я предполагаю, читая вопрос, что предполагается хотя бы один символ нижнего регистра. Итак, я думаю, что предполагаемое последнее правило должно быть:
(Смена головных уборов на ориентированные на безопасность - это действительно раздражающее / бесполезное правило.)
Умение распознавать неправильный вопрос гораздо важнее умных ответов. Умный ответ на неправильный вопрос почти всегда неверен.
источник
В качестве примера, как это можно сделать с помощью читаемого / поддерживаемого регулярного выражения.
Для более длинного регулярного выражения вы всегда должны использовать,
RegexOptions.IgnorePatternWhitespace
чтобы разрешить пробелы и комментарии в выражении для лучшей читаемости.источник
lookahead assertion
шаблоном as вида «и», чтобы охватить все ограничение в одном регулярном выражении. Работает для большего количества ограничений и может быть легко сгенерирован, если некоторые ограничения должны быть включены / отключены конфигурацией.Если вам нужен только один верхний регистр и специальный символ, это должно сработать:
источник
AAaaaaaaa#
не соответствует этому выражению,Регулярное выражение , которое вы ищете это:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*\[\]"\';:_\-<>\., =\+\/\\]).{8,}$/u
.Пример и тест: http://regexr.com/3fhr4
источник
.
до{8,}
к[^\s]
.Этот вопрос становится вирусным, и появилось много интересных предложений.
Да, писать от руки сложно. Поэтому более простым решением является использование шаблона. Хотя полученное регулярное выражение может быть не самым оптимальным, его будет проще поддерживать и / или изменять, и пользователь будет лучше контролировать результат. Возможно, я что-то упустил, поэтому любая конструктивная критика будет полезна.
Эти ссылки могут быть интересными: сопоставить хотя бы 2 цифры 2 буквы в любом порядке в строке , язык регулярных выражений , группы захвата
Я использую этот шаблон
(?=(?:.*?({type})){({count})})
на основе всего регулярного выражения, которое я видел в SO. Следующим шагом будет замена необходимого шаблона (number
,special character
...) и добавление конфигурации длины.Я сделал небольшой класс для составления регулярного выражения PasswordRegexGenerator.cs Пример:
источник
Вы можете использовать следующий класс для проверки:
где 6 и 20 - минимальная и максимальная длина пароля.
источник
(?>{8,})
(?<=...)
(?<=\p{Lu}.*)
(?<=\W.*)
(?<=\w.*)
Подвела:
(?>.{8,})(?<=\p{Lu}.*)(?<=\W.*)(?<=\w.*)
источник
Best не использует регулярное выражение для всего. Эти требования очень легкие. В отношении ЦП строковые операции для проверки критериев / валидации намного дешевле и быстрее, чем регулярное выражение!
источник
источник
источник