Espressione regolare per convalidare i numeri di telefono degli Stati Uniti?

Possibile duplicato:
Una regex completa per la convalida del numero di telefono
Convalidare il numero di telefono con JavaScript

Sto cercando di scrivere un’espressione regolare per convalidare il numero di telefono degli Stati Uniti in formato (123)123-1234 – vero 123-123-1234 – vero

ogni altra cosa non è valida.

Mi è venuto qualcosa di simile

^\(?([0-9]{3}\)?[-]([0-9]{3})[-]([0-9]{4})$ 

Ma questo convalida, 123) -123-1234 (123-123-1234

che NON è GIUSTO.

Il modo più semplice per abbinarli entrambi

 ^\([0-9]{3}\)[0-9]{3}-[0-9]{4}$ 

e

 ^[0-9]{3}-[0-9]{3}-[0-9]{4}$ 

è usare l’ alternanza ( (...|...) ): specificarli come due opzioni per lo più separate:

 ^(\([0-9]{3}\)|[0-9]{3}-)[0-9]{3}-[0-9]{4}$ 

A proposito, quando gli americani mettono tra parentesi il prefisso, in realtà mettiamo uno spazio dopo; per esempio, scriverei (123) 123-1234 , non (123) 123-1234 (123)123-1234 . Quindi potresti voler scrivere:

 ^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$ 

(Anche se è probabilmente meglio dimostrare esplicitamente il formato in cui prevedi di inserire i numeri di telefono).