How do I create a String model and whenever the user passes something different report the error?

2

I need a String template that starts with a letter, has no space, accepts numbers, is case sensitive, and does not accept special characters or accents, (it will be the name of a table in the database ) so I wanted something that would work as a filter to accept or not. What's the best way to do this? The ideal thing was to point out what it was, but not necessarily.

Today I do something like this:

    String escreve = (escrevetabela.getText().toString()).replaceAll(" ","");

                if(escreve.indexOf("0")==0||escreve.indexOf("1")==0||
                        escreve.indexOf("2")==0||escreve.indexOf("3")==0||
                        escreve.indexOf("4")==0||escreve.indexOf("5")==0||
                        escreve.indexOf("6")==0||escreve.indexOf("7")==0||
                        escreve.indexOf("8")==0||escreve.indexOf("9")==0||
                        escreve.indexOf("9")==0){

mas como descobri que caracteres especial da problema também, essa lista de ous ia ficar um tanto extensa. 

Using the answer below with some modifications looks like this:

    ok.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                String escreve = (escrevetabela.getText().toString()).replaceAll(" ","");
                Pattern p = Pattern.compile("^[a-zA-Z]\w+");

                Matcher m = p.matcher(escreve);
                if(m.find() && m.group().length() == escreve.length()) {
                    insert       (escreve);
                    abrebanco2   (escreve);
                    iniciartabela(escreve);
                    fechabanco();
                    Intent intent = new Intent(adcionartabela.this,gerenciar2.class);
                    intent.putExtra("pagina", page2);
                    intent.putExtra("tabbanco", tabbancos);
                    startActivity(intent);
                    adcionartabela.this.finish();
                }
                else {
                    AlertDialog.Builder mensagem = 
                            new AlertDialog.Builder(adcionartabela.this);
                    mensagem.setTitle("Atenção!");
                    mensagem.setMessage("Nome inválido, não inicie com caracter numérico, use somente letras e números, não utilize espaços.");
                    mensagem.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {

                        }});
                    mensagem.show();
                }
            }
        });

Vlw Math

    
asked by anonymous 10.11.2014 / 13:09

1 answer

4

I think the easiest way to do this is by using Regex.

For your case, use the "^[a-zA-Z]\w+" pattern.

An example code that uses Regex above:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
    public static void main(String[] args) {
        String[] palavras = new String[]{"teste1", "teste 2", "3o.teste", "téste4"};
        Pattern p = Pattern.compile("^[a-zA-Z]\w+");
        for(String s: palavras) {
            Matcher m = p.matcher(s);
            if(m.find() && m.group().length() == s.length()) {
                System.out.println("padrão ok");
            }
            else {
                System.out.println("fugiu do padrão");
            }
        }
    }
}

Result:

  

standard okay
  Fled the pattern
  Fled the pattern
  ran away from the pattern

    
10.11.2014 / 13:29