Има два подхода. Единият е да се състави един израз, който обработва всички възможни алтернативи:
^[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,}$
и т.н. Това е комбинаторен кошмар, но ще свърши работа.
Много по-прост подход е един и същи низ да се валидира два пъти, като се използват два израза:
^[a-zA-Z0-9-,._;:]{8,}$ # check length and permitted characters
и
[a-zA-Z].*[0-9]|[0-9].*[a-zA-Z] # check required characters
РЕДАКТИРАНЕ:@briandfoy правилно посочва, че ще бъде по-ефективно да се търси всеки задължителен знак поотделно:
[a-zA-Z] # check for required alpha
и
[0-9] # check for required digit