Avatar billede sbk200 Nybegynder
04. juni 2004 - 09:59 Der er 7 kommentarer og
1 løsning

Valider AWT textField

Hello Eksperter,
Hvorledes validerer man et awt textField. Jeg har fire felter til en IP adresse hvori der kun må indtastes tal mellem 0 - 255. Hvordan sikre jeg mig at brugeren kun kan indtaste i dette interval ?
Er det evt muligt at have ip adressen samlet i et textField vor punktum er faste ala:
192.10.0.4
Avatar billede simonvalter Praktikant
04. juni 2004 - 10:06 #1
med det første kan du lave en Integer.parse.. og catche en NumberFormatException ... så ved du om det er et tal.. derefter kan du teste om det er inden for den talrække.

med det sidste skal du nok have fat i en regular expression.. jeg skal desværre lige løbe nu og kan ikke lave den uden at læse på det..
http://java.sun.com/docs/books/tutorial/extra/regex/intro.html
Avatar billede simonvalter Praktikant
04. juni 2004 - 12:49 #2
hurtigt tilbage, kom lige til at tænke på at den sidste kan du også lave ved at splitte med string.split() (sdk 1.4) eller en StringTokenizer og komme i et array
og så lave dine tests.
Avatar billede simonvalter Praktikant
04. juni 2004 - 13:18 #3
Her er en måde er lave det på med regular expression
retunerer true hvis string matcher reg
regular expressions kom vist først i sdk 1.4

public class Test4 {
 
    public static void main(String[] args)
    {
        String test = "192.168.1.4";
        String reg = "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
    System.out.println(test.matches(reg));
     
    }
}
Avatar billede simonvalter Praktikant
04. juni 2004 - 13:55 #4
du kan skifte reg ud med en kortere version hvis du ikke vil benytte dig af grupperne.
String reg = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";

det smarte med grupper er at du f.eks kan gøre dette for at få fat i tallene.


import java.util.regex.*;
public class Test4 {
    private static Pattern pattern;
    private static Matcher matcher;
    public static void main(String[] args)
    {
        String test = "192.168.111.154";
        String reg = "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";

       
        pattern = Pattern.compile(reg);
        matcher = pattern.matcher(test);
     
        boolean matchFound = matcher.find();
 
      if (matchFound) {
         
          for (int i = 0; i <= matcher.groupCount(); i++)
          {
              String groupStr = matcher.group(i);
              System.out.println(groupStr);
          }
      }

    }
}
Avatar billede sbk200 Nybegynder
07. juni 2004 - 08:37 #5
Hej Simon, Din løsning er fin men jeg skal anvende SDK 1.1 for at være kompertibel med Microsoft VM. Her var regular expression vist ikke med så vidt jeg kan se. :-(
Avatar billede simonvalter Praktikant
07. juni 2004 - 16:09 #6
så kan du bruge StringTokenizer f.eks

import java.util.StringTokenizer;

public class Test {
    public static void main(String[] args)
    {

        String test = "792.168.1.4";
        System.out.println(validate(test));
    }

    public static boolean validate(String s)
    {
        StringTokenizer st = new StringTokenizer(s, ".");
       
        if (st.countTokens() != 4)
        {
            return false;
        }

        while (st.hasMoreTokens())
        {
            try
            {
                int number = Integer.parseInt(st.nextToken());
                if (number > 255 || number < 0)
                {
                    return false;
                }
            }
            catch (NumberFormatException nfe)
            {
                return false;
            }
        }

        return true;

    }
}
Avatar billede sbk200 Nybegynder
07. juni 2004 - 16:19 #7
Super fedt! Det var lige hvad jeg havde brug for - tak for hjælpen Simon.
Avatar billede simonvalter Praktikant
07. juni 2004 - 16:44 #8
det var så lidt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester