Testing in PhpStorm, none of those worked for me, but this did. The the / in your character class isn't escaping the hyphen (that would be \-), so the hyphen is defining a range. If you put the hyphen at the end of the character class, it doesn't need escaping.
The regexp code doesn't add a delimiter, so you'd have to add a delimiter to each end like this:
The code uses preg_match(), which doesn't take the /g modifier, so that will always cause an error. Withoug it, you'll only get the first match unless you write your own custom validator that uses preg_match_all().