Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99

    Espressioni regolari

    Salve, mi sapreste aiutare nel fare un exp reg che come primo carattere abbia una lattera dell'alfabeto, e i successivi qualsiasi carattere?
    Esempio: m556604049 , r9303t56 eccetera
    invece 6t9393883 non andrebbe bene. In Pattern p = Pattern.compile("a&&[\\D]"); che gli devo mettere?io ho fatto così e non funziona..

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Espressioni regolari

    Originariamente inviato da doping
    Salve, mi sapreste aiutare nel fare un exp reg che come primo carattere abbia una lattera dell'alfabeto, e i successivi qualsiasi carattere?
    Esempio: m556604049 , r9303t56 eccetera
    invece 6t9393883 non andrebbe bene. In Pattern p = Pattern.compile("a&&[\\D]"); che gli devo mettere?io ho fatto così e non funziona..
    "[a-zA-Z].*"
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99

    Re: Re: Espressioni regolari

    Originariamente inviato da andbin
    "[a-zA-Z].*"
    si ho provato anche così, leggendo 1 poco il manuale in linea della sun, ma non so se dipende da eclipse o cosa, ma in questo modo le lettere dell'alfabeto ad esempio non me le fà inserire proprio.

    public class JMatrTextField extends JTextField {

    private class MatrOnly extends PlainDocument {
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
    Pattern p = Pattern.compile("[a-zA-Z].*");
    Matcher m = p.matcher(str);

    if (str == null || m.matches()) {
    return;
    }
    super.insertString(offs, str, a);
    }
    }

    /** Creates a new instance of JNumberTextField */
    public JMatrTextField() {
    super();
    this.setDocument(new MatrOnly());
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Espressioni regolari

    Originariamente inviato da doping
    si ho provato anche così, leggendo 1 poco il manuale in linea della sun, ma non so se dipende da eclipse o cosa, ma in questo modo le lettere dell'alfabeto ad esempio non me le fà inserire proprio.
    L'uso di una espressione regolare in insertString() di un PlainDocument non va bene. Ciò che ricevi come stringa in insertString() è solo il testo aggiunto di volta in volta.

    Se nel textfield digiti le lettere 'c' 'i' 'a' 'o' allora il metodo insertString() viene invocato 4 volte con le stringhe: "c" poi "i", "a", "o". Quindi cosa testi???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99

    Re: Re: Re: Re: Espressioni regolari

    Originariamente inviato da andbin
    L'uso di una espressione regolare in insertString() di un PlainDocument non va bene. Ciò che ricevi come stringa in insertString() è solo il testo aggiunto di volta in volta.

    Se nel textfield digiti le lettere 'c' 'i' 'a' 'o' allora il metodo insertString() viene invocato 4 volte con le stringhe: "c" poi "i", "a", "o". Quindi cosa testi???
    E da cosa ho potuto capire testo i caratteri singoli e non la stringa intera, però non conosco altri modi per personalizzare un documento al di fuori di plaindocument, nel mio esercizio non è richiesto di svolgerlo tramite una GUI ma in modo + semplificato con dei controlli, ma io voglio farlo con i jtextfield in modo da poter inserire solo espressioni corrette, e non espressioni errate e poi andarle a controllare se sono corrette o errate, anche perchè se avrei varie tipologie di espressioni dovrei andar a fare un controllo per ognuna, invece con il Pattern faccio subito.Sai instradarmi meglio?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: Espressioni regolari

    Originariamente inviato da doping
    Sai instradarmi meglio?
    Vedi la classe javax.swing.InputVerifier.
    Personalmente non l'ho mai usata ma dalla documentazione presumo sia quello che serve a te.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99
    Si è quasi quello che mi serve, però con inputverifer si può lasciare il jtextfield solo dopo aver inserito una stringa uguale a quella richiesta in input, a me non serve una sola stringa da inserire, ma + tipi della stessa forma (espressione regolare). mi spiego meglio con un esempio cosa vorrei fare: supponiamo che devo digitare inserire una stringa nel mio jtextfield, e deve essere del tipo [a-zA-Z].* , allora digito nel seguente modo da tastiera:

    carattere accettato(true, false)
    1 false
    a true
    v true
    c true
    2 true

    eccetera eccetera, cioè se provo ad inserire una NON lettera la prima volta non devo poter inserire nulla, una volta inserita una lettera al primo posto poi tutti gli altri vanno bene. Ci stò provando in vari modi, anche mescolando insieme l'inputverifer e il pattern, ma ancora nulla.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99
    public class VerifierTest extends JFrame {

    private Pattern p;
    private Matcher m;

    public VerifierTest() {
    p = Pattern.compile("[a-zA-Z].*");
    JTextField tf1 = new JTextField ("");
    getContentPane().add (tf1, BorderLayout.NORTH);
    tf1.setInputVerifier(new PassVerifier());

    JTextField tf2 = new JTextField ("TextField2");
    getContentPane().add (tf2, BorderLayout.SOUTH);

    WindowListener l = new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    };
    addWindowListener(l);
    }

    class PassVerifier extends InputVerifier {
    public boolean verify(JComponent input) {
    JTextField tf = (JTextField) input;
    m = p.matcher(tf.getText());
    return m.matches();
    }
    }

    public static void main(String[] args) {
    Frame f = new VerifierTest();
    f.pack();
    f.setVisible(true);
    }
    }


    Ci sono riuscito, ho modi****to l'esempio presente nel manule della sun appartenente alla classe inputverifer, le modifiche riguardano il pattern. Vi convince?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io farei una classe più facilmente riutilizzabile:

    codice:
    class JTextFieldRegexVerifier extends InputVerifier
    {
        private Pattern pattern;
    
        public JTextFieldRegexVerifier (String regex)
        {
            pattern = Pattern.compile (regex);
        }
    
        public boolean verify (JComponent input)
        {
            JTextField tf = (JTextField) input;
    
            return pattern.matcher (tf.getText ()).matches ();
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99
    Si è esattamente uguale e identica a come l'ho scritta nel mio programma, perchè mi servono varie espressioni diverse e quindi è molto + semplice da modificare. Grazie di tutto, anche questa è risolta

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.