Wyrażenie regularne pasujące do standardowego 10-cyfrowego numeru telefonu

Chcę napisać wyrażenie regularne dla standardowego numeru telefonu w USA, który obsługuje następujące formaty:

###-###-####
(###) ###-####
### ### ####
###.###.####

gdzie # oznacza dowolną liczbę. Do tej pory wymyśliłem następujące wyrażenia

^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}

odpowiednio. Nie jestem do końca pewien, czy ostatni jest poprawny dla czeku przerywanego. Chcę też wiedzieć, czy jest jakiś sposób, w jaki mógłbym napisać pojedyncze wyrażenie zamiast 4 różnych, które odpowiadają różnym formatom, o których wspomniałem. Jeśli tak, nie jestem pewien, jak to zrobić. A także, jak zmodyfikować wyrażenie / wyrażenia, aby móc również dołączyć warunek obsługi kodu obszaru jako komponentu opcjonalnego. Coś jak

+1 ### ### ####

gdzie +1 to numer kierunkowy i jest opcjonalny.

questionAnswers(17)

yourAnswerToTheQuestion