Re:Tratar exceções em regular expressions

2 respostas
thiago.correa
String teste = "<12345678<[telefone removido]>123456789012:";
String regexValida = "<\d{8}<\d{10}>\d{12}:";
String regexInvalida = "<[0]{8}<[0]{10}>[0]{12}:";

Pattern p = Pattern.compile(regexInvalida);
Matcher m = p.matcher(teste);

if ( m.machtes() ) {
   throw new Exception("CMC7  inválido");
}

// caso contrário você continua com a execução normal do programa

2 Respostas

T

Acho que é matar mosca com canhão, mas lá vai:

import java.util.regex.*;
import java.util.*;

class TesteExceto {
    public static void main(String[] args) {
        String regexValida = "&lt\d{8}&lt\d{10}&gt\d{12}:";
        String regexInvalida = "<00000000<[telefone removido]>000000000000:";        
        String[] test = {
            "<12345678<[telefone removido]>123456789012:",
            "<00000000<[telefone removido]>000000000000:",
            "0000000000000000000000000000000000"
        };
        Pattern pat = Pattern.compile("(?!" + regexInvalida + ")" + regexValida, Pattern.CASE_INSENSITIVE);
        for (int i = 0; i &lt test.length; ++i) {
            System .out .println ("{" + test[i] + "} : " + pat.matcher(test[i]).matches());
        }
    }
}

Cuidado com "(?!)" que isso não resolve todos os problemas.

vance

Pessoal,

Criei uma regular expression para validar CMC7 (uma espécie de linha digitável do cheque).
Um exemplo de CMC7 poderia ser o seguinte:

Criei a seguinte regexp:

A regular expression funciona bem, mas preciso rejeitar um CMC7 que possua zeros em todos os dígitos.

Hoje eu testo se a string bate com a regexp, e se bater, testo novamente para ver se não é o caso dos zeros.

Alguém pode me dizer se há como modificar a regexp para ela rejeitar esse caso?

Obrigado.

Criado 6 de outubro de 2006
Ultima resposta 5 de out. de 2006
Respostas 2
Participantes 3