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.
\b\d{3}[.-]\d{3}[.-]\d{4}\b
The regexp code doesn't add a delimiter, so you'd have to add a delimiter to each end like this:
/\b\d{3}[.-]\d{3}[.-]\d{4}\b/
or
@\b\d{3}[.-]\d{3}[.-]\d{4}\b@
or
%\b\d{3}[.-]\d{3}[.-]\d{4}\b%
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().