Có hai cách tiếp cận. Một là soạn một biểu thức duy nhất xử lý tất cả các lựa chọn thay thế có thể có:
^[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,}$
v.v ... Đây là một cơn ác mộng tổ hợp, nhưng nó sẽ hoạt động.
Một cách tiếp cận đơn giản hơn nhiều là xác thực cùng một chuỗi hai lần bằng cách sử dụng hai biểu thức:
^[a-zA-Z0-9-,._;:]{8,}$ # check length and permitted characters
và
[a-zA-Z].*[0-9]|[0-9].*[a-zA-Z] # check required characters
CHỈNH SỬA:@briandfoy chỉ ra một cách chính xác rằng sẽ hiệu quả hơn nếu tìm kiếm từng ký tự bắt buộc riêng biệt:
[a-zA-Z] # check for required alpha
và
[0-9] # check for required digit