Избегать дефиса с помощью \-
- правильный путь.
Я проверил, что выражение /^[a-zA-Z0-9.\-_]+$/
допускает дефисы. Вы также можете использовать класс \w
, чтобы сократить его до /^[\w.\-]+$/
.
(Помещение дефиса последним в выражении фактически приводит к тому, что он не требует экранирования, поскольку тогда он не может быть частью диапазона, однако вы все равно можете захотеть всегда избегать его.)