2017-09-01 1 views
0

tl; dr: Wie kann ich eine Zählereinschränkung für ein bestimmtes Token in einer Regex festlegen? Einschränken von Ziffern in einer Regex-Übereinstimmung

(regex-exp){constraint:max 10 only digits} 

Ich habe versucht, eine Telefonnummer in einem Textblock zu finden. Android-Plattformen Patterns Klasse bietet eine angemessene Abdeckung. Aber das Hauptproblem hat es

  • Es verfügt nicht über eine Mindestlänge
  • Es verfügt nicht über eine maximale Länge

Also eigentlich passt es sogar 1234 und auch wenn es eine Zeichenfolge wie my phone numbers are +19447223311 872881122, es entspricht beiden Zahlen als eine einzige Zahl. Wenn wir eine Einschränkung hinzufügen können, dass das Muster Ziffern {7,12} haben sollte, wird es für beide lösen, denke ich. So viel ich versuchte, konnte es nicht funktionieren lassen. Hier ist die Regex für das Muster.

public static final Pattern PHONE 
    = Pattern.compile(      // sdd = space, dot, or dash 

      "(\\+[0-9]+[\\- \\.]*)?"  // +<digits><sdd>* 

      + "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>* 

      + "([0-9][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit> 
+0

Mögliche Duplikat [Java Reguläre Ausdrücke zu validieren Telefonnummern] (https://stackoverflow.com/ Fragen/42104546/java-regulary-expressions-to-validate-phone-Nummern) –

+0

Telefonnummern haben nicht wirklich eine maximale Länge. Einige Unternehmen verwenden besonders zusätzliche Ziffern, wenn sie etwas buchstabieren, da die zusätzlichen Zahlen ignoriert werden. –

+0

@GabeSechan Vielleicht ja. Aber in meinem Fall möchte ich wissen, wie man eine Umrechnung auf eine Regex setzt. : - \ – Codevalley

Antwort

0

Es gibt nicht so etwas wie regex Einschränkung in Android und als das PHONE Muster vorkompilierte ist, können Sie es entweder nicht verlängern.

Ich würde es tun, wie folgt:

Pattern constraint = Pattern.compile("\\+?\\d{7,12}"); 
Matcher constraint_matcher = constraint.matcher("I will be home by 12:30 and if you have anything " + 
     "urgent call me at 901 101 0101, and my extension is 1021 +19447223311 872881122 "); 

while (constraint_matcher.find()) { 

    Matcher phone_number_matcher = Patterns.PHONE.matcher(constraint_matcher.group(0)); 

    if (phone_number_matcher.find()) { 
     Log.d("MATCH", phone_number_matcher.group(0)); 
    } 
} 

, die dieses Ergebnis gibt:

09-15 16:20:34.277 10119-10119/com.example D/MATCH: +19447223311 
09-15 16:20:34.277 10119-10119/com.example D/MATCH: 872881122 
Verwandte Themen