Sobre os exemplos, alguns comentários:
A regex de email considera que coisas como [email protected]
são emails válidos.
Regex pra email, que não dê esses falsos positivos, é bem mais complicado do que parece. Claro que a regex em questão pega emails válidos, o problema é que também pega muitos inválidos...
Para o slug, a regex considera que uma string vazia é um slug válido (porque o *
significa "zero ou mais caracteres", então se não tiver nenhum também serve). Se não era essa a intenção, pode trocar por +
(um ou mais caracteres) ou então usar quantidades específicas de acordo com cada caso (ex: {5,}
para ter no mínimo 5 caracteres, {5,20}
para ter entre 5 e 20, etc).
E na regex do username, acho que faltou um quantificador. Da forma que está (^[a-z0-9-_]$
) ele pega somente um caractere.