2012-06-25 4 views
1

Вот регулярное выражение я кладезь с веб-сайта компании MicrosoftРегулярное выражение для паролей со специальными символами

(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$ 

и Validates a strong password. It must be between 8 and 10 characters, contain at least one digit and one alphabetic character, and must not contain special characters.

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

+0

Какие специальные символы вы хотите разрешить? – robert

+0

@robert теперь нам нужен только пароль, содержащий хотя бы одну цифру и одну букву, поэтому я думаю, что все специальные символы. – pita

+1

Каждый раз, когда я вижу кого-то, кто устанавливает верхний предел допустимой длины пароля, мое первое предположение заключается в том, что они неправильно управляют паролями, поскольку хэшированные пароли фиксированной длины, независимо от того, сколько времени пароль. Вы храните пароли в виде обычного текста? Если это так, это первая проблема, которая нуждается в исправлении, но если нет, то почему вы запрещаете людям использовать [правильную батарею штанов для лошадей] (http://xkcd.com/936/)? –

ответ

3

(?!^[0-9]*$) является негативным взглядом. Это утверждение терпит неудачу, если есть только цифры от начала до конца. Итак, у вас есть разные возможности:

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

(?=.*\d) требует, по крайней мере одна цифра

(?=.*[a-zA-Z]) требует, по крайней мере одна буква

Ваше регулярное выражение будет выглядеть примерно так:

^(?=.*[0-9])(?=.*[a-zA-Z]).{8,10}$ 

средства требуют по меньшей мере одна цифра, одна буквой и состоять из 8-10 символов. . может быть любым символом, но не символом новой строки.

Посмотреть here at Regexr

+0

, он работает! Я уже пробовал этот шаблон раньше, и как-то это не сработало. Но я до сих пор не понимаю, почему существует «=», и вы можете объяснить «!». также, я хочу, чтобы иметь возможность написать его сам, а не копировать его. спасибо – pita

+0

Группа, начинающаяся с '? =', представляет собой положительный lookahead, а группа, начинающаяся с '?!', является отрицательным взглядом, подробно объясняются на [regular-expressions.info] (http: //www.regular- expressions.info/lookaround.html). – stema