Verificar caracteres invalidos em uma String

8 respostas
mcbarsotti

Olá a todos,

preciso verificar se uma String contem algum caracter invalido como "’!@#$%¨&*()-_+§=/°?;:.>,<|[{]}ºª¹²³£¢¬
sei q uma expressão regular é perfeito para isso, mas não estou conseguindo fazer uma.

se alguem puder me ajudar seria legal!! :lol:

Valewww!!! :stuck_out_tongue:

8 Respostas

peczenyj

que caracteres são validos, afinal?

Se a sua expressão casar com ^\w+$ ( onde \w equivale a um word character : [a-zA-Z_0-9]) ela só contem, do inicio ao fim, pelo menos um caracter letra, numero ou underline.

Se tiver uma @ perdida ja não casa.

Verifique se a sua string pode conter \n, se sim vc tem que utilizar uma expressão regular multi-linha (tem q usar uma flagzinha lá)

mcbarsotti

Todos menos "’!@#$%¨&*()-_+§=/°?;:.>,<|[{]}ºª¹²³£¢¬

e a String tb não pode conter \n, mas acho q a regex que vc me passou vai resolver!!! :lol:

Obrigado peczenyj, vou testar, qq coisa eu retorno! :lol:

[]'s

peczenyj

A tabela ascii tem 255 caracteres. Vc quer todos os 255 - 40 caracteres restantes?

Seria o caso, IMHO, de definir os caracteres válidos pois uma lista negada é uma faca de dois gumes. Fique atento a localização!

mcbarsotti

vou fazer oque vc sugeriu msm, vou fazer uma lista de permitidos, e não de não permitidos…
é mais facil…

valeww!

J

Olá
Vcs tem o código para esse problema?

FabioQuintana

Olá, jonatascaberlon.

ai vai um exemplo de como você pode utilizar o "regex" ...

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Fabio Q.
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // Create matcher on file
        String value = "Fabio Quintana $";
        String host = "";

        //* \s -- whitespace (espaço em branco)
        //* \S -- non-whitespace (não seja espaço em branco)
        //* \w -- word character [a-zA-Z0-9] (caractere de palavra)
        //* \W -- non-word character (não caractere de palavra)
        //* \p{Punct} -- punctuation (pontuação)
        //* \p{Lower} -- lowercase [a-z] (minúsculas)
        //* \p{Upper} -- uppercase [A-Z] (maiúsculas)

        /* aqui você defini qual o tipo de avaliação */
        Pattern pattern = Pattern.compile("\w");
        /* passa a String a ser avaliada */
        Matcher matcher = pattern.matcher(value);

        // Find all matches
        while (matcher.find()) {
            // imprimi o retorno tratado
            host += matcher.group();
        }

        System.out.println(host);

    }

    // Converts the contents of a file into a CharSequence
    // suitable for use by the regex package.
    public CharSequence fromFile(String filename) throws IOException {
        FileInputStream fis = new FileInputStream(filename);
        FileChannel fc = fis.getChannel();
        // Create a read-only CharBuffer on the file
        ByteBuffer bbuf = fc.map(FileChannel.MapMode.READ_ONLY, 0, (int)fc.size());
        CharBuffer cbuf = Charset.forName("8859_1").newDecoder().decode(bbuf);
        return cbuf;
    }

}

Onde lê a string e retorna apenas o conteudo valido...
para mais informações e parametros, busque por java.util.regex que você vai achar o javadoc...

Abraço.

J

Olá.
Utilizando dessa forma ele mantém somente letras e numeros.
Como posso fazer para que, na mesma “compilação”, o java mantenha caracteres sendo letras, numero, espaço e acentos?

FabioQuintana

jonatascaberlon:
Olá.
Utilizando dessa forma ele mantém somente letras e numeros.
Como posso fazer para que, na mesma “compilação”, o java mantenha caracteres sendo letras, numero, espaço e acentos?

Basta que você troque esta linha;

/* aqui você defini qual o tipo de avaliação */ Pattern pattern = Pattern.compile("\w");

Por algo do tipo;

/* aqui você defini qual o tipo de avaliação, vai agregando os caracteres que você julga valido... */ Pattern pattern = Pattern.compile("[qwertyoiupasdfghjklçzxcvbnm QWERTYOIUPASDFGHJKLZXCVBNM áéíóúêâîôûãõ.,/;:-+=()]");

Apenas um exemplo, ainda falta caracteres, mas basta você incluir todos os que julga valido
incluindo espaço e underline… lembrando que sempre entre “[]” …

Abraço.

Criado 31 de março de 2008
Ultima resposta 16 de set. de 2010
Respostas 8
Participantes 4