Предположим, у меня есть несколько требований к паролю. Во-первых, пароль должен быть 8-20 символов, а первый и последний символы должны быть альфа-символами, а средние символы - любой комбинацией альфа-чисел, смешанных с несколькими символами. Выражение, которое мне удалось найти до сих пор:Объединить выражения регулярных выражений с AND
^[a-zA-Z] {1} [a-zA-Z0-9 # $! & * @()] {6,18} [a-zA-Z] {1} $
Это прекрасно работает, но теперь требование состоит в том, что я должен иметь как минимум 1 символ верхнего регистра, по крайней мере один нижний регистр, по меньшей мере одну цифру и, по крайней мере, один из упомянутых символов.
Как совместить эти требования в одном выражении, например, что я могу имитировать что-то вроде:
If(Regex.IsMatch(“^[a-zA-Z]{1}[a-zA-Z0-9#$!&*@()]{6,18}[a-zA-Z]{1}$”, userInput) // Check most of the conditions (starts with alpha, ends with alpha, and is 8-20 characters total)
&& Regex.IsMatch(“[A-Z]”, userInput) // Ensure there’s an upper case
&& Regex.IsMatch(“[a-z]”, userInput) // Ensure there’s a lower case
&& Regex.IsMatch(“[0-9]”, userInput) // Ensure there’s a digit
&& Regex.IsMatch(“[#$!&*@()]”) // Ensure there’s an allowed symbol
)
{
// Do something here
}
Я понимаю, что оператор OR только |, но есть простой способ «И» условия вместе ? Если нет, то какой рекомендуемый подход?
Я думаю, что '(? =. * [AZ])' эквивалентно просто '(? = [AZ])', не так ли? –
Спасибо за '/^$ /' Тим! – Borodin
@Igor: no, '(? =. * [A-Z])' позволяет букве появляться где угодно в строке, тогда как '(? = [A-Z])' настаивает на том, чтобы она находилась в начале строки. Возможно, вы были смущены тем, что я опускал якобы '/^/' и '/ & /' (исправлено Tim)? – Borodin