tl; dr: Como definir uma restrição de contagem em um token específico em uma regex.
(regex-exp){constraint:max 10 only digits}
Eu tenho tentado encontrar um número de telefone em um bloco de texto. Plataformas Android Patterns
classe oferece uma cobertura razoável. Mas a principal questão que tem
- Não tem um comprimento mínimo
- Não tem um comprimento máximo
Então, na verdade, combina mesmo 1234
e também quando há uma string como my phone numbers are +19447223311 872881122
, ele combina os dois números como um único número. Se pudermos adicionar uma restrição de que o padrão deve ter dígitos {7,12}, isso resolverá os dois, eu acho. Por mais que eu tentei não consegui fazê-lo funcionar. Aqui está a regex para o padrão.
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>
Respostas:
0 para resposta № 1Não existe tal coisa como restrição de regex no Android e como o PHONE
padrão é pré-compilado, você também não pode estendê-lo.
Eu faria assim:
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));
}
}
o que dá esse resultado:
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