Вы можете использовать это.Это в основном использует lookahead для достижения 3-го требования.
(?=.*\d)(?=.*[a-zA-Z])\w{7,}
или строку Java
"(?=.*\\d)(?=.*[a-zA-Z])\\w{7,}"
Объяснение
"(?=" + // Assert that the regex below can be matched, starting at this position (positive lookahead)
"." + // Match any single character
"*" + // Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
"\\d" + // Match a single digit 0..9
")" +
"(?=" + // Assert that the regex below can be matched, starting at this position (positive lookahead)
"." + // Match any single character
"*" + // Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
"[a-zA-Z]" + // Match a single character present in the list below
// A character in the range between “a” and “z”
// A character in the range between “A” and “Z”
")" +
"\\w" + // Match a single character that is a “word character” (letters, digits, and underscores)
"{7,}" // Between 7 and unlimited times, as many times as possible, giving back as needed (greedy)
Редактировать
Если вы хотите включить поддержку букв в юникоде, используйте эту
(?=.*\d)(?=.*\pL)[\pL\d]{7,}