2017-03-07 1 views
2

Ich habe meine regulären Express unten, entspricht die Telefonnummer korrekt.JavaScript Match geklammert, wenn eine linke oder rechte Klammer im regulären Ausdruck vorhanden sind

var reg2= /^(\d?)[-. ]?[(]?(\d{3})[)]?[- ]?(\d{3})[- ]?(\d{4})$/g; 

Das Problem, das ich habe, ist meine REG2 für die Eingänge gültig Rückkehr below.How ich eine regelmäßige ausdrückliche schaffen, dass, wenn es einen parenthesize erkennt, eine andere parenthesize erfordert gültig zu sein, sonst ungültig zurück.

"555)-555-5555" 
"(555-555-5555" 
"1 555)555-5555" 

bearbeiten

Zugleich mit regelmäßigen

15556667777 
1-555-666-7777 
1 555 666 7777 

Antwort

1

arbeiten Sie sollten diese Regex dafür, dass Sie nur übereinstimmen passende Klammern oder keine Klammern verwenden können:

/^\d?[-. ]*(?:\(\d{3}\)|\d{3})[- ]*\d{3}[- ]*\d{4}$/ 

(?:\(\d{3}\)|\d{3}) ist Alternation, um (111) oder 111 am Anfang der Telefonnummer zu ermöglichen.

RegEx Demo

+0

kann ich dich fragen, was ist der Unterschied zwischen $ '(?: \ (\ D {3} \) | \ d {3})' und '(\ (\ d {3} \) | \ d {3}) '. Der offensichtliche Unterschied wäre $ '?:'. Wenn es keinen Unterschied gibt, wofür wird $ '?:' Speziell verwendet? –

+0

'(?: ...)' ist eine nicht einfangende Gruppe und '(...)' ist eine einfangende Gruppe. Die Verwendung einer nicht einfangenden Gruppe wird als besser für die Gesamteffizienz angesehen. – anubhava

+1

Ahhh, dein Recht. Das war perfekt. Vielen Dank. –

Verwandte Themen