Code:
^
(?:[A-Z]|(.))
(?:[A-Z]|(.))
(?:[0-9]|(.))
(?:[0-9]|(.))
(?:[A-Za-z0-9]|(.)){,12}
$
Die Idee dahinter sind Non-capturing Groups (?: ) für die erlaubten Zeichen und Capturing Groups () für die nicht erlaubten mit einer Oder-Verknüpfung. Das bedeutet alles was in einer Capture Group landet ist ein falsches Zeichen. Die Zeilenumbrüche sind nur für die bessere Lesbarkeit hier im Forum.