2016-07-11 8 views
0

Ich versuche, einen regulären Ausdruck (für den Einsatz in Java) zu schreiben, die die folgenden Bedingungen erfüllen würde (es ist ein spezifisches Telefon-Format)Regex: Begrenzen Sie das Auftreten von numerischen Zeichen in einer alphanumerischen String

  1. (aber nicht erforderlich) beginnt mit +
  2. # oder enthält -
    • a) Liste item
    • b) nicht am Anfang oder Ende des Strings
    • c) Es nicht b kann e zwei aufeinanderfolgenden Auftritten von jenen
  3. Neben +, -, # nur numerische Zeichen hat, und die Menge von numerischen Zeichen (eine beliebige Zahl) enthalten kann zwischen 8 bis 20.

I sein weiß wie es geht 1), 2a), 2b). Habe 2c noch nicht probiert. Aber ich habe ernsthafte Probleme mit 3). Ich war irgendwie in der Lage, die Erscheinungen von [0-9] zu begrenzen, aber es prüft Erscheinungen der gleichen Zahl, und ich will die Zählung irgendeines Zahlzeichens begrenzen.

Dieser Versuch wurde auf Basis von: Limit number of alpha characters in regular expression

Alle Ideen sind willkommen :)

+1

Könnten Sie bitte Ihre Regex (wie sie ist) und die Beispieleingaben teilen, gegen die Sie sie ausprobiert haben? –

Antwort

0

Look-aheads verwenden, dies es für Sie tun sollten:

^(?=[^\d\n]*(?:\d[^\d\n]*?){8,20}$)(?!.*[-#][-#])\+?[\d][\d#-]+[\d]$ 

Es beginnt mit einem positive Vorschau, die auf 8-20 Wiederholungen einer Ziffer prüft, gefolgt von einer beliebigen Anzahl von Wiederholungen von Nicht-Ziffern. Diesem kann optional eine beliebige Anzahl von Nicht-Ziffern vorangestellt sein. Das ist die Überprüfung der Anzahl der Ziffern.

Dann gibt es ein negatives Voraussehen, um zu bestätigen, dass es keine sich wiederholenden Bindestriche oder Rautenzeichen gibt (erfasst eins gefolgt von einer hinteren Referenz = zwei in einer Reihe).

Schließlich erlaubt es eine optionale + und danach ist es einfach ein Test für eine beliebige Anzahl von sich wiederholenden Ziffern, Bindestriche und Rautenzeichen.

Check the examples here at regex101.

Edit:

Modifizierte regex Fall 2b zu handhaben, und 2c, wo man direkt auf dem anderen (-# oder #-) folgt.

+0

Das funktioniert perfekt. Danke für die Erklärung. Ich wurde verwirrt mit dem Zählen von Zahlen! –

Verwandte Themen