2010-10-29 6 views
2

Я не могу заставить это работать.C# Регулярное выражение

Я ищу регулярное выражение, которое будет проверять пароль. Допустимыми символами являются a-zA-Z0-9, но последовательность должна иметь как минимум 1 номер и 1 заглавную букву.

Можно ли это сделать?

+0

возможно дубликат [Помощь по сложности пароля регулярное выражение] (http://stackoverflow.com/questions/2582079/help-with-password-complexity -regex) –

ответ

2
^(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]+$ 

следует сделать.

^    # start of string 
(?=.*[A-Z]) # assert that there is at least one capital letter ahead 
(?=.*[0-9]) # assert that there is at least one digit ahead 
[A-Za-z0-9]+ # match any number of allowed characters 
       # Use {8,} instead of + to require a minimum length of 8 characters. 
$    # end of string 
0

Вы можете использовать non-zero-width lookahead/lookbehind assertions в регулярном выражении. Например:

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$ 

Требуется, чтобы существовало хотя бы одно число, одно строчное и одно прописное письмо. Использование \w позволяет принимать символы, отличные от английского или акцентированные (которые вы можете или не хотите разрешать). В противном случае вместо этого используйте [a-zA-Z].

+0

Это позволяет намного больше, чем требуется OP ('\ w' является Unicode-совместимым в .NET) - хотя, конечно, ограничение допустимых букв для * пароля * тоже не имеет большого смысла. –

+0

@Tim Pietzcker: Да, я знаю. Я упоминаю, что '\ w' будет принимать акцентированные и международные символы слова из набора юникодов. Это альтернатива использованию конструкции [a-zA-Z]. – LBushkin

+0

Извините, я не читал ваш ответ достаточно внимательно. Но '\ w' также соответствует цифрам и символам подчеркивания (и другим символам, преходящим слово). –

0
bool valid = 
    Regex.IsMatch(password, @"\w+")// add additional allowable characters here 
    && Regex.IsMatch(password, @"\d") 
    && Regex.IsMatch(password, @"\p{Lu}"); 
Смежные вопросы