preg_match solo letras, espacios y guiones y espacios permitidos

Sé que una condición que estoy usando actualmente donde da un error si $ stringabc contiene algo más que números es:

if(preg_match("/[^0-9]/",$stringabc))

Quiero una condición if donde da un error si $ stringdef contiene algo más que letras, espacios y guiones (-).

Respuestas a la pregunta(3)

Su respuesta a la pregunta