2015-08-11 6 views
-1

Я хочу, чтобы регулярное выражение ниже комбинацииРегулярное выражение для шаблона пароля

Пароль должен содержать не менее 8 символов. По крайней мере, одна прописная буква , по крайней мере одна строчная буква и, по меньшей мере, одна цифра . Он может содержать специальные символы, но не пробелы.

В настоящее время я использую под регулярным выражением.

/^.*((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(.*[[email protected]#$%^&*()_+=])).*$/i 

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

Заранее спасибо

+0

Зачем без пробелов? Вы должны использовать только минимум 14 символов максимум 50+ или то, что использует ваш хеш (например, bcrypt). – OIS

ответ

1

Удалите i модификатор и .*, который существует до lookaheads, а также вам нужно добавить A-Za-z\d внутри класса символов, так что он будет соответствовать также буквы и цифры.

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

Если вы используете i модификатор, это сделало бы (?=.*[A-Z]) часть бессмысленным.

DEMO

+0

Я хочу добавить специальные символы! –

+0

ya, этот wou; ld делает специальные символы как необязательные. –

0

это пример для пароля скороговоркой.

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}) 

после описания для примера:

(   # Start of group 
(?=.*\d)  # must contains one digit from 0-9 
(?=.*[a-z])  # must contains one lowercase characters 
(?=.*[A-Z])  # must contains one uppercase characters 
(?=.*[@#$%]) # must contains one special symbols in the list "@#$%" 
      .  # match anything with previous condition checking 
     {6,20} # length at least 6 characters and maximum of 20 
)    # 

Может ли это может быть, вам помочь?

2

Вы могли бы действительно упростить это с помощью Javascript и некоторые простой, легко понять регулярные выражения:

function validPassword(password) { 
    return password.length >= 8 // Length 
     && !~password.indexOf(" ") // No spaces 
     && password.match(/[A-Z]/) != null // One uppercase 
     && password.match(/[a-z]/) != null // One lowercase 
     && password.match(/[0-9]/) != null; // One numerical digit 
} 

Example Test Cases

Лично я могу прочитать, что гораздо проще, чем я могу читать /^.*((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(.*[[email protected]#$%^&*()_+=])).*$/i

+1

Каждый должен это сделать. Я поддерживаю массивный скрипт проверки синтаксиса в своей работе и в итоге разбил его на несколько десятков простых регулярных выражений вместо одного невозможного для понимания. – Copas

0

Это регулярное выражение, которое вы можете использовать:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\S{8,}$/ 

См demo

Объяснение:

  • (?=.*\d) - Требуется цифра, чтобы быть в строке
  • (?=.*[a-z]) - Требуется строчная
  • (?=.*[A-Z]) - Требует заглавную букву
  • \S{8,} - строка должна содержать любой символ, но пробел, не менее 8 вхождений.

Примечание якоря ^ и $, они незаменимы. И нет модификатора i, иначе прописная/строчная дифференциация не будет работать.

В качестве альтернативы, чтобы оптимизировать регулярное выражение немного, мы можем использовать counterclasses:

/^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])\S{8,}$/ 
+0

Обратите внимание, что предлагаемое регулярное выражение Avinash не позволит '' '' '' или '' 'и других специальных символов. Не уверен, что это то, что вам нужно. –

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