Si no me equivoco, los caracteres no válidos son:
/ \ * : ?
Por lo que basta con que compruebes que ninguno de ellos está en la cadena que tenés. Con PHP sería:
Código PHP:
ereg("[^\\/*:?]", $cadena);
Si ereg devuelve
true es que se encontró alguno de esos caracteres en la cadena (y por lo tanto no es un caracter válido).
Si se me está olvidando algún caracter, basta con que lo agregues a la clase de caracteres.
Solo notar un par de cosas: Cualquier caracter que tenga significado "extra" para PHP debe ser escapado (como el caso de la barra \ que quedó como \\). Y cuidado con los metacaracteres: si acaso querés que no se puedan usar guiones en los nombres (-) tendrás que ponerlo al final de la clase, ya que ponerlo entre otros 2 caracteres (por ejemplo, que quede ?-*) puede causar problemas (quizás el motor de expresiones regulares intente definir un rango entre ? y *, por ejemplo).
Espero que te sirva.
Saludos.