Ваше регулярное выражение
/^([a-zA-Z0-9_])+/
Ищет
- Начало строки (проверка), затем
- 1 или более букв, цифр или подчеркивания (отметка)
А потом, что бы ни последовало после, это не имеет значения. Это регулярное выражение будет совпадать с чем угодно, если оно начинается с буквы, цифры или подчеркивания
Если вы поставите $
в конце, то он будет работать - $
соответствует 'концу строки', поэтому он может соответствовать только при наличии только цифр, букв и подчеркивает между началом и концом строки.
/^([a-zA-Z0-9_])+$/
Во-вторых, я бы предложил использовать document.getElementById('display-name').value
вместо document.forms
, так как он не сломается, если вы переставите HTML, и является более «общепринятым стандартом того, что делать»