Avatar billede michartmann Nybegynder
23. april 2004 - 18:49 Der er 25 kommentarer og
1 løsning

Validaring af username og phonenumber

Hej Eksperter,
Er det nogen der kender til en standard funktion, som henholdsvis checker et username og et phonenumber for de typiske syntaks regler og ulovlige symboler?
Det skal bruges i en business tier.
Avatar billede arne_v Ekspert
23. april 2004 - 18:51 #1
Hvis du er på Java 1.4, så var regular expressions nok en oplagt mulighed.
Avatar billede michartmann Nybegynder
23. april 2004 - 19:03 #2
Jeg er mere ude efter en færdig funktion eller to....
Avatar billede soreno Praktikant
23. april 2004 - 19:05 #3
Det er jo et spørgsmål om at definere "de typiske syntaks regler og ulovlige symboler".

Hvis du definerer dem, så tror jeg nok der skal være en (f.eks. mig eller Arne) der laver en færdig funktion du kan benytte.
Avatar billede michartmann Nybegynder
23. april 2004 - 19:14 #4
Jeg er egentlig bare ude efter en standard løsning med max længde og hvor ingen symboler er lovlige
Avatar billede arne_v Ekspert
23. april 2004 - 19:20 #5
Kan du ikke bare teste på s.length() og Character.isLetterOrDigit(s.charAt(i)) så ?
Avatar billede soreno Praktikant
23. april 2004 - 19:21 #6
Pattern p = Pattern.compile("\\w{3, 8}");
boolean b = m.matches(userNameStr);

Tester om userNameStr overholder
[3-8] tegn bestående af [a-zA-Z_0-9]
Avatar billede soreno Praktikant
23. april 2004 - 19:22 #7
Telefonnr.

\d{8}

Præcist 8 tegn bestående af [0-9]
Avatar billede _carsten Nybegynder
23. april 2004 - 20:04 #8
Du kan også bruge et JFormattedTextField og installere en MaskFormatter i det.

I nedenstående felt kan du taste op til 3 tal og/eller bogstaver

import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;

public class JFrame_4 extends javax.swing.JFrame {
    public JFrame_4() {
        initComponents();     
    }

    private void initComponents() {
        jFormattedTextField1 = new javax.swing.JFormattedTextField();

        getContentPane().setLayout(new java.awt.FlowLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        field = new FormattetField();
        field.setPreferredSize(new java.awt.Dimension(100, 20));
        field.setMinimumSize(new java.awt.Dimension(100, 20));
        getContentPane().add(field);

        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new JFrame_4().show();
    }
   
    private FormattetField field;   
}

class FormattetField extends JFormattedTextField{
    public FormattetField(){
        super();
        try{
            MaskFormatter mask = new MaskFormatter("AAA");
            mask.setPlaceholder(" ");
            mask.install(this);
        }
        catch (ParseException p){
            p.printStackTrace();
        }
    }
}
Avatar billede soreno Praktikant
23. april 2004 - 20:11 #9
Køreklar eksempel på løsning ved regulære udtryk:

import java.util.regex.*;

public class MainTester
{
    public static boolean validate(String str, String pattern)
    {
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(str);
        return m.matches();       
    }
   
    public static void main(String[] args)
    {
        String userPattern = "\\w{3,8}";
        String user1 = "soren";
        String user2 = "so£££ren";
        System.out.println(user1 + " = " + validate(user1, userPattern));
        System.out.println(user2 + " = " + validate(user2, userPattern));

        String telePattern = "\\d{8}";
        String tele1 = "86863333";
        String tele2 = "123456789";
        System.out.println(tele1 + " = " + validate(tele1, telePattern));
        System.out.println(tele2 + " = " + validate(tele1, telePattern));
       
    }   
}

Output:
soren = true
soúúúren = false
86863333 = true
123456789 = true
Avatar billede _carsten Nybegynder
23. april 2004 - 21:11 #10
Nu ved jeg ikke hvordan dit format skal være, men hvis du vil tvinge et bestemt format igennem, kan du rette FormattetField til nedenstående, hvilket gør at der kan tastes 4 tegn, 2 numeriske og 2 bogstaver, de skal yderligere tastes i denne rækkefølge, alternativt kan feltet efterlades blankt.

class FormattetField extends JFormattedTextField{
    MaskFormatter mask;
   
    public FormattetField(){
        super();
        try{
            mask = new MaskFormatter("##UU");
            mask.install(this);
            setInputVerifier(new FormattetField.MyVerifier());
        }
        catch (ParseException p){
            p.printStackTrace();
        }
    }
        class MyVerifier extends javax.swing.InputVerifier {
            public boolean verify(javax.swing.JComponent input) {
              if(getText().equals(""))
                    return true;

                try{
                    mask.valueToString(getText());
                }
                catch (ParseException p){
                    return false;
                }
                return true;
            }
        }
}
Avatar billede michartmann Nybegynder
23. april 2004 - 22:12 #11
Jeg er lidt i tvivl om hvorledes nedenstående udtryk skal læses - kan nogen forklare det ?
       
String userPattern = "\\w{3,8}";
String telePattern = "\\d{8}";
Avatar billede arne_v Ekspert
23. april 2004 - 22:15 #12
Fra java.util.regex.Pattern docs:

\d      A digit: [0-9]

\w     A word character: [a-zA-Z_0-9]

X{n,m}      X, at least n but not more than m times
Avatar billede michartmann Nybegynder
23. april 2004 - 22:22 #13
ville føgende udtryk også være gyldigt?:
String userPattern = "\\w\\d{3,8}";

skal mene at alle bogstaver og tal er lovlige - intet andet.
Avatar billede arne_v Ekspert
23. april 2004 - 22:23 #14
\w inkluderer tal

\\w\\d{3,8} må betyde et bogstav elle rtal efterfulgt af 3-8 tal
Avatar billede michartmann Nybegynder
23. april 2004 - 22:26 #15
Hvorledes skriver man så at alle tal og bogstaver er lovlige i et tilfældigt mix og med en længde på 3-8?

PS. (tak for tålmodigheden :0) )
Avatar billede arne_v Ekspert
23. april 2004 - 22:28 #16
Som søren skrev for nogle timer siden:

String userPattern = "\\w{3,8}";
Avatar billede michartmann Nybegynder
23. april 2004 - 22:32 #17
Det har du ganske ret i.
Men hvordan kan det være at jeg ikke kan give dig eller søren point?
Avatar billede arne_v Ekspert
23. april 2004 - 22:33 #18
Vi har ikke lagt svar.

Det kan vi gøre nu.
Avatar billede arne_v Ekspert
23. april 2004 - 22:33 #19
svar
Avatar billede arne_v Ekspert
23. april 2004 - 22:34 #20
Husk at vent på at Søren ligger et svar
Avatar billede soreno Praktikant
24. april 2004 - 08:24 #21
Svar.
Avatar billede arne_v Ekspert
24. april 2004 - 12:35 #22
Det var mit helt klare indtryk at spørge ville dele points så:
  http://www.eksperten.dk/spm/492862
Avatar billede arne_v Ekspert
24. april 2004 - 12:36 #23
Jeg tillader mig at regne med at det er 5-5-5.
Avatar billede michartmann Nybegynder
24. april 2004 - 13:43 #24
fik jeg delt pointe forkert - det var ikke min intention :=(
Avatar billede arne_v Ekspert
24. april 2004 - 13:47 #25
Jeg fik dem alle, men vi har ordnet det indbyrdes. No problem.
Avatar billede michartmann Nybegynder
24. april 2004 - 13:48 #26
fino og tak for hjælpen igen :0)
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