2015-04-06 3 views
1

Отказ от ответственности: Это проблема Codewars.Проверка пароля Regex - Код:

You need to write regex that will validate a password to make sure it meets the following criteria:

  • At least six characters long
  • contains a lowercase letter
  • contains an uppercase letter
  • contains a number

Valid passwords will only be alphanumeric characters.

До сих пор это моя попытка:

function validate(password) { 
    return /^[A-Za-z0-9]{6,}$/.test(password); 
} 

Что это делает до сих пор, это убедиться, что каждый символ является алфавитно-цифровой и что пароль не менее 6 символов. Кажется, что он работает правильно в этом отношении.

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

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

+2

Есть, наверное, десяток подобных вопросов на SO уже, если не больше. Найдите их. –

+1

https://www.google.co.in/search?q=ypeError:+expected+a+character+buffer+object&ie=UTF-8&sa=Search&channel=fe&client=browser-ubuntu&hl=ru&gws_rd=cr,ssl&ei=EOchVZS3JYLv8gXJkoHwCA# channel = fe & hl = en-IN & q = site: stackoverflow.com + regex + password + validation –

ответ

7

Вы должны использовать lookaheads:

function validate(password) { 
    return /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])[A-Za-z0-9]{6,}$/.test(password); 
} 

Объяснение:

^    # start of input 
(?=.*?[A-Z]) # Lookahead to make sure there is at least one upper case letter 
(?=.*?[a-z]) # Lookahead to make sure there is at least one upper case letter 
(?=.*?[0-9]) # Lookahead to make sure there is at least one number 
[A-Za-z0-9]{6,} # Make sure there are at least 6 characters of [A-Za-z0-9] 
$    # end of input 
+2

Страшно, как быстро вы получили этот ответ ... Я голосую за вас, только исходя из вашей скорости! –

+1

Кажется работать. Разум объясняет это немного? – Shashank

+0

@TimBiegeleisen: Большое спасибо. Shashank: Я добавил объяснение в свой ответ. – anubhava

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