Existují dva přístupy. Jedním z nich je sestavit jediný výraz, který zvládne všechny možné alternativy:
^[a-zA-Z][0-9][a-zA-Z0-9-,._;:]{6,}$
|
^[a-zA-Z][a-zA-Z0-9-,._;:][0-9][a-zA-Z0-9-,._;:]{5,}$
|
^[a-zA-Z][a-zA-Z0-9-,._;:]{2}[0-9][a-zA-Z0-9-,._;:]{4,}$
atd. Toto je kombinatorická noční můra, ale fungovalo by to.
Mnohem jednodušší přístup je ověřit stejný řetězec dvakrát pomocí dvou výrazů:
^[a-zA-Z0-9-,._;:]{8,}$ # check length and permitted characters
a
[a-zA-Z].*[0-9]|[0-9].*[a-zA-Z] # check required characters
EDIT:@briandfoy správně upozorňuje, že bude efektivnější hledat každý požadovaný znak zvlášť:
[a-zA-Z] # check for required alpha
a
[0-9] # check for required digit