Используемое регулярное выражение допустимо. Но я предполагаю, что JSLint жалуется на отсутствие знака escape перед -
в классах символов:
/^[a-zA-Z0-9._\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,4}$/
Выход из -
внутри класса символов требуется только в том случае, если он не находится в начале или конце класса символов или если он не обозначает диапазон при использовании между двумя символами.
Вот несколько допустимых примеров:
/[-xyz]/ // "-", "x", "y", "z"
/[xyz-]/ // the same as above
/[-]/ // "-"
/[a-z-]/ // "a"-"z", "-"
/[a-b-c]/ // "a"-"b", "-", "c"