2016-07-05 92 views
7

Sto cercando di estrarre solo numeri di telefono USA da una stringa.Estrarre numeri di telefono statunitensi da una stringa

Ho cercato sul Web/SO ma non ho trovato nessuna soluzione adatta alle mie esigenze.

Per essere onesti, ho 2,5 anni di esperienza nella programmazione Web, ma faccio schifo a Regex.

Qui è solo espressione regolare che ho scritto (\d{3}+\-\d{3}+\-\d{4}+)

ma rileva solo 589-845-2889

Qui ci sono i numeri di telefono che voglio estrarre.

589-845-2889 

(589)-845-2889 

589.845.2889 

589 845 2889 

5898452889 

(589) 845 2889 

Per favore dimmi come posso ottenere questa impresa in singolo Regex per PHP.

EDIT:

Se si sente qualsiasi altro formato di numero degli Stati Uniti un utente può inserire, menziona anche che pure, e comprendono che in RegEx pure.

P.S:

In realtà io sto cercando di raschiare Craiglist e l'utente potrebbe aver pubblicato il loro numero di telefono in qualsiasi formato possibile.

+0

"589 845-2889" potrebbe essere una corrispondenza? – anubhava

+0

Sì, qualsiasi modo in cui un utente può inserire il proprio numero – Umair

+1

Possibile duplicato di [Un'espressione regolare per la convalida del numero di telefono] (http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number- validazione) – hugomg

risposta

2

In PHP (PCRE) è possibile utilizzare questo regex sulla base conditional subpatterns:

(\()?\d{3}(?(1)\))[-.\h]?\d{3}[-.\h]?\d{4} 

RegEx Demo

  • (\()? partite opzionale ( e cattura in gruppo # 1
  • (?(1)\)) è modello condizionale che corrisponde chiusura ) solo se il gruppo # 1 non è nullo cioè ( è presente sulla sinistra della partita.
+0

Perché ha un risultato strano? http://sandbox.onlinephpfunctions.com/code/b3b6cf795b8026c85d5c9bbdc04943978e94e8d0 – Umair

+0

Voglio dire, restituisce 2 array, il primo array va bene, cos'è il secondo array? – Umair

+0

Si dovrebbe usare 'var_dump ($ result [0]);' per i risultati. [Controlla questa demo ora] (http://sandbox.onlinephpfunctions.com/code/1cc85f77cb46becf28711e9162c8ea601d752375) – anubhava

1

Infine, funziona:

^(\((\d{3})\)|(\d{3}))[\s\-\.]?\d{3}[\s\-\.]?\d{4} 

testate in Notepad ++