String teste = "<12345678<1234567890>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
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 = "<\d{8}<\d{10}>\d{12}:";
String regexInvalida = "<00000000<0000000000>000000000000:";
String[] test = {
"<12345678<1234567890>123456789012:",
"<00000000<0000000000>000000000000:",
"0000000000000000000000000000000000"
};
Pattern pat = Pattern.compile("(?!" + regexInvalida + ")" + regexValida, Pattern.CASE_INSENSITIVE);
for (int i = 0; i < test.length; ++i) {
System .out .println ("{" + test[i] + "} : " + pat.matcher(test[i]).matches());
}
}
}
Cuidado com "(?!)" que isso não resolve todos os problemas.
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.