У меня есть это относительно простое регулярное выражение для имен пользователей
// 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));
Что, к сожалению, допускает следующие тестовые строки, готовые к XSS:
'angle<bracket',
'angle>bracket',
'html<script>inside',
И я понятия не имею, почему, поскольку они уже должны быть явно запрещены регулярным выражением.
Вот текущий тестовый пример:
http://ideone.com/od7dj
Кто-нибудь знает, почему угловые скобки разрешены регулярным выражением, которое явно не допускает их? Я должен экранировать один из этих символов (. + -) как литералы?