Предотвращение XSS отличается от проверки ввода.
Относительно XSS: Вы не должны пытаться проверять ввод для XSS или связанных эксплойтов. Следует избегать эксплойтов XSS, внедрения SQL и т. Д., Корректно экранируя при вставке строк на другой язык, где некоторые символы являются «волшебными», например при вставке строк в HTML или SQL. Например, такое имя, как O'Reilly, является абсолютно корректным вводом, но может привести к сбою или, что еще хуже, при вставке без экранирования в SQL. Вы не можете предотвратить подобные проблемы, проверяя ввод.
Проверка ввода пользователя имеет смысл для предотвращения пропущенных или искаженных данных, например. пользователь пишет «asdf» в поле почтового индекса и так далее. Wrt. адреса электронной почты, хотя синтаксис настолько сложен, что не дает большой пользы для проверки его с помощью регулярных выражений. Просто проверьте, что он содержит "@".