Avatar billede sito Nybegynder
10. juni 2003 - 21:07 Der er 10 kommentarer og
1 løsning

validering i java

Hej

Er der i java ligesom i PHP mulighed for at validere for eksempel et postnummer ved hjælp af regulære udtryk? Vi vil gerne validere hvor mange tal postnummeret indeholder.
Derudover vil vi gerne validere på dato, som ikke alene kun må indeholde tal, men som også skal skrives på en bestemt måde (ex. mm/dd/åååå).
Vi benytter focusEvent, og lytter på de pågældende textfelter. For hver gang focus forlader textfeltet skal data valideres.

Håber i kan hjælpe.
Avatar billede arne_v Ekspert
10. juni 2003 - 21:12 #1
Så vidt jeg kan se har du 2 muligheder:

a)  parse strengen med en SimpleDateFormat og se om du får fejl

b)  [hvis Java 1.4] teste med en regular expression
Avatar billede riversen Nybegynder
10. juni 2003 - 21:13 #2
Avatar billede arne_v Ekspert
10. juni 2003 - 21:17 #3
Eksempel på #a:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class FormatCheck {
    public static void main(String[] args) {
        System.out.println(match("06/10/2003"));
        System.out.println(match("10-06-2003"));
    }
    private final static DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    private static boolean match(String ds) {
        try {
            df.parse(ds);

        } catch (ParseException e) {
            return false;
        }
        return true;
    }
}
Avatar billede arne_v Ekspert
10. juni 2003 - 21:24 #4
(ikke helt færdigt) eksempel på #b:

import java.util.regex.*;

public class FormatCheck {
    public static void main(String[] args) {
        System.out.println(match("06/10/2003"));
        System.out.println(match("10-06-2003"));
    }
    private static Pattern p = Pattern.compile("[0-9]+/[0-9]+/[0-9]+");
    private static boolean match(String ds) {
        return p.matcher(ds).matches();
    }
}
Avatar billede sito Nybegynder
10. juni 2003 - 21:52 #5
Jeg kan godt parse min streng og benytte eks.a Tak :) Men jeg er istand til at indtaste en dato der hedder: 16/34/4007! Er der en måde hvorpå jeg smatidig kan checke, at måned skal være fra 1-12 og dag fra 1-31 og så videre?
Avatar billede arne_v Ekspert
10. juni 2003 - 22:03 #6
Ja.

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class FormatCheck {
    public static void main(String[] args) {
        System.out.println(match("06/10/2003"));
        System.out.println(match("10-06-2003"));
        System.out.println(match("16/34/4007"));
    }
    private final static DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    private static boolean match(String ds) {
        try {
            return df.format(df.parse(ds)).equals(ds);
        } catch (ParseException e) {
            return false;
        }
    }
}
Avatar billede arne_v Ekspert
10. juni 2003 - 22:04 #7
(bemærk dog a 4007 stadigvæk er et validt år)
Avatar billede sito Nybegynder
10. juni 2003 - 22:06 #8
Er det den del der hedder df.format der undersøger om det er en lovlig dato?
Avatar billede arne_v Ekspert
10. juni 2003 - 22:10 #9
Ja.

Det er et lille trick.

Man konverterer først:
  streng til binær tid
og så konverterer man:
  binær tid til streng
hvis den nye streng svarer til den oprindelige streng, så
er det fordi det er en valid tid.
Avatar billede arne_v Ekspert
10. juni 2003 - 22:10 #10
Lidt et hack.

Men det virker fint.
Avatar billede sito Nybegynder
10. juni 2003 - 22:12 #11
Tusind tak for hjælpen :)
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