Since the ranges used here are of fixed length, you could simply write out the entire range `[0-9]{3}` => `[0-9][0-9][0-9]`. And instead of `(| |-|.)`, `( |-|.)?` \- though I am confused: are you allowing any character (`.`), in addition to space and `-`? Then it could just be `.?` since space and `-` are matched by `.` anyway. If you're matching the literal period `.`, then you should use `[- .]?` instead (the leading `-` is to avoid interpretation as a character range). So:
^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$
Becomes:
^\(?0[1-9][1-9]\)?[- .]?[1-9][0-9][0-9][0-9][- .][0-9][0-9][0-9][0-9]$