Регулярное выражение для соответствия стандартному 10-значному номеру телефона

Я хочу написать регулярное выражение для стандартного номера телефона в США, который поддерживает следующие форматы:

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

где # означает любое число. До сих пор я придумал следующие выражения

^[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}

соответственно. Я не совсем уверен, что последний правильный для пунктирной проверки. Я также хочу знать, можно ли как-нибудь написать одно выражение вместо 4 разных, отвечающих различным форматам, которые я упомянул. Если так, я не уверен, как мне это сделать. А также, как мне изменить выражение / выражения, чтобы я мог также включить условие для поддержки кода области в качестве необязательного компонента. Что-то вроде

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

где +1 код города, и это не обязательно.

Ответы на вопрос(17)

Ваш ответ на вопрос