В JSR-303 есть проверка регулярных выражений (javax.validation). Например:
@Pattern(regexp="[\w_\\.]+")
private String username;
Сообщение по умолчанию, которое отображается, когда значение недопустимо (не соответствует регулярному выражению), выглядит как «Must match {regex}». Но пользователи не понимают регулярные выражения, поэтому показывать им это неактуально. Можно просто показать «Имя пользователя содержит недопустимые символы», и, вероятно, в большинстве случаев все будет в порядке. Но будет хорошо показать, какой персонаж не прав.
Этого нельзя достичь с помощью регулярного выражения - оно либо совпадает, либо нет. Вы должны либо определить другие шаблоны, которые пропускают некоторые компоненты, либо попробовать удалить символы из строки, пока она не совпадет, а затем показать эти символы пользователю.
Это было в общем. Другой вопрос, как этого добиться с помощью javax.validation.
Итак, подведем итоги вопроса:
Как отобразить оскорбительные символы с помощью javax.validation, чтобы сообщение выглядело как «Символы?, * И $ недопустимы»