2010-12-09 8 views
3

Ich brauche einen regulären Ausdruck, um Telefonnummern zu entsprechen. Ich möchte nur wissen, ob die Nummer wahrscheinlich eine Telefonnummer ist und es könnte ein beliebiges Telefonformat sein, US oder international. Also habe ich eine Strategie entwickelt, um festzustellen, ob sie übereinstimmt.Regulärer Ausdruck für den Abgleich einer Telefonnummer

Ich möchte, dass es die folgenden Zeichen akzeptiert: 0-9 sowie ,.()- und optional mit einem + starten (für internationale Nummern). Die Zeichenfolge sollte nicht übereinstimmen, wenn sie andere Zeichen enthält.

Ich versuchte dies:

/\+?[0-9\/\.\(\)\-]/ 

Aber es passt Telefonnummern + in der Mitte der Reihe haben. Und es stimmt mit Zahlen überein, die Alpha-Zeichen enthalten (ich will das nicht).

Zuletzt möchte ich die Mindestlänge auf 9 Zeichen setzen.

Irgendwelche Gedanken? offensichtlich nicht zu schnell auf RegEx Sachen

Vielen Dank für jede Hilfe, ich bin :)

+0

Leider ist es nur mühsam, wenn es um internationale Telefonnummern geht, nur Nummern zuzulassen, die eine gültige Telefonnummer sind. Die Länge und der Stil der internationalen Nummern sind sehr unterschiedlich. Es ist jedoch möglich zu sagen, dass Sie eine 9-stellige oder größere Nummer möchten, wie er es unten getan hat. – m4tt1mus

+0

mögliches Duplikat von [Ein umfassender Regex zur Überprüfung der Telefonnummer] (http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – Mark

Antwort

4

Nun, du bist ziemlich nah dran. Versuchen Sie folgendes:

^\+?[0-9\/.()-]{9,}$ 

Ohne den Start- und End-Anker Sie Teilanpassung erlauben, so kann es +123 aus dem String :-)+123 entspricht.

Wenn Sie ein Minimum von 9 Ziffern wollen, eher als alle Zeichen (so ---.../// nicht gültig ist), können Sie verwenden:

^\+?[\/.()-]*([0-9][\/.()-]*){9,}$ 

oder ein Look-Ahead mit - bevor die Zeichenfolge für den Abgleich [0-9/.()-]* die Regex-Engine sucht nach (\D*\d){9}, die eine von 9 Ziffern ist, wobei jeder Ziffer möglicherweise andere Zeichen vorausgehen (die wir später validieren werden).

^\+?(?=(\D*\d){9})[0-9\/.()-]*$ 
+1

+1 Dies entspricht den Kriterien in die Frage. Der ITU-Standard, der Telefonnummern definiert, ist wahrscheinlich erwähnenswert: http://en.wikipedia.org/wiki/E.164 – msw

+0

Hinweis - Sie müssen die Schrägstriche möglicherweise mit '\ /' entkommen - ich halluzinierte das '.net' Tag, also habe ich es nicht aufgenommen. Eigentlich werde ich es hinzufügen, nur um sicher zu sein. – Kobi

+0

Dies wird nicht funktionieren, weil Sie die()/oder nicht entkommen konnten. richtig. Zumindest wird es in den Sprachen, die ich benutzt habe, nicht funktionieren. Obwohl die Syntax korrekt ist. – m4tt1mus

1

Der Grund, warum es Alpha-Zeichen übereinstimmt ist wegen der Zeit. Du musst ihm entkommen. Ich weiß nicht, was Editor Sie dafür verwenden, das ist, was ich für VIM verwenden werden:

^+\?[()\-\.]\?\([0-9][\.()\-]\?\)\{3,\}$ 
+0

Ich fürchte, das ist nicht wahr. Sie müssen dem Punkt in einer Zeichenklasse nicht entkommen ('[.]'). Außerdem sollten Sie nicht '' '' '' '' '' '' '' 'in Ihrer Regex, sondern sollten die' + 'entkommen. – Kobi

+0

Sie haben Recht mit dem Punkt entkommen, aber ich muss fliehen ?, und für VIM. Ich weiß nicht, was Sie verwenden, um Regex zu schreiben, also gebe ich nur mein Wissen basierend auf VIM. – nikeairj

+0

Sehr interessante Variante - es scheint zunächst umgekehrt, aber es macht Sinn. – Kobi

0

Die juqeury hat ein Plugin für US-Telefonvalidierung. Überprüfen Sie diese link. Sie können den regulären Ausdruck auch im Quellcode sehen.