regex de validação de nome de usuário @preg_match permite> e <apesar desses caracteres não estarem na lista de permissões

Eu tenho esse regex relativamente simples para nomes de usuário

// Enforce that username has to be 3-100 characters, alphanumeric, and first character a letter.
// Possibility without begin/end characters and i: [a-z][a-z0-9@.+-_]{2,100}
// Allow for simple email usernames in the future...
return !!preg_match('#^[a-zA-Z][a-zA-Z0-9@.+-_]{2,100}$#', trim($username));

O que, infelizmente, permite essas sequências de teste prontas para XSS:

'angle<bracket',
'angle>bracket',
'html<script>inside',

E eu não tenho idéia do porquê, já que eles já devem ser explicitamente proibidos pelo rege

qui está um caso de teste em execuçã

http: //ideone.com/od7d

Alguém sabe por que os colchetes angulares estão sendo permitidos por uma regex que não os permite explicitamente? Devo escapar de um desses caracteres (. + -) como literais?

questionAnswers(4)

yourAnswerToTheQuestion