tl; dr: Come posso impostare un vincolo di conteggio su un particolare token in un'espressione regolare.
(regex-exp){constraint:max 10 only digits}
Ho cercato di trovare un numero di telefono in un blocco di testo. Piattaforme Android Patterns
la classe offre una copertura ragionevole. Ma il problema principale ce l'ha
- Non ha una lunghezza minima
- Non ha una lunghezza massima
Quindi corrisponde effettivamente anche 1234
e anche quando c'è una stringa simile my phone numbers are +19447223311 872881122
, corrisponde a entrambi i numeri come un numero singolo. Se possiamo aggiungere un vincolo che il modello dovrebbe avere cifre {7,12}, risolverà per entrambi credo. Per quanto ho provato, non ho potuto farlo funzionare. Ecco la regex per il pattern.
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>
risposte:
0 per risposta № 1Non esiste una cosa del genere regex constraint in Android e come PHONE
il modello è precompilato, non è possibile estenderlo.
Lo farei così:
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));
}
}
che dà questo risultato:
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