Programmazione:Java/Eclipse RCP/Validazione Text by RegExp

Da WikiSitech.
Versione del 15 nov 2007 alle 16:24 di Rimondini (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazioneVai alla ricerca

Validation by Regular Expression

Per validare ciò che l'utente digita in un controllo, tipo un Text SWT, il modo migliore è utilizzare le Regular Expression.

Per effettuare queste verifiche non è necessario estendere i componenti, anzi meno vengono estesi i componenti meglio è ^^.

Ecco alcuni esempi di regular expression per effettuare alcune validazioni.

// caratteri stampabili PRINTABLE_MASK_DATA = "\\p{Print}" // caratteri ALFA_MASK_DATA = "\\p{Alpha}" // caratteri e numeri ALFANUM_MASK_DATA = "\\p{Alnum}" // numeri NUMBER_MASK_DATA = "\\p{Digit}" // importo formattato con massimo 15 cifre intere e 3 decimali CURRENCY_MASK_DATA = "[\\p{Digit}]{1,15}[\\,][\\p{Digit}]{0,3}";

Come detto prima la validazione può essere eseguita da codice esterno ai componenti.

Per esempio si potrebbe creare un manager che si occupi di effettuare questa validazione.

public class RETextValidationManager implements Listener {

  public RETextValidationManager() {
  }
  /**
   * Aggiunge il controllo della validazione a un componente
   */
  public void addValidation(Text control, String mask) {
     control.setData(WidgetManager.TEXT_INPUT_MASK_DATA, mask);
     control.addListener(SWT.KeyDown, this);
     control.addListener(SWT.Dispose, this);
  }
  
  /**
   * Calcola la stringa generata dalla pressione del tasto
   */
  protected String getTextValueOnKeyDown(Event ev) {
     Text w = ((Text) ev.widget);
     String v = "" + ev.character;
     String val = null;
     if (w.getSelectionCount() > 0) {
        val = w.getText().substring(0, w.getSelection().x) + v + w.getText().substring(w.getSelection().y);
     } else {
        if (w.getSelection().x == 0) {
           val = v + w.getText().substring(w.getSelection().x);
        } else {
           val = w.getText().substring(0, w.getSelection().x) + v + w.getText().substring(w.getSelection().x);
        }
     }
     return val;
  }
  public void handleEvent(Event event) {
     switch(event.type) {
        case SWT.KeyDown:
           // come prima verifica controllo se è stato premuto un tasto 'stampabile' 
           // altrimenti la validazione è inutile
           Pattern rePrint = Pattern.compile(WidgetManager.PRINTABLE_MASK_DATA);
           if (rePrint.matcher("" + event.character).matches()) {
              String val = getTextValueOnKeyDown(event);
              String mask = (String) event.widget.getData(WidgetManager.TEXT_INPUT_MASK_DATA);
              Pattern reMask = Pattern.compile(mask);
              if (!reMask.matcher(val).matches()) {
                 event.doit = false;
              }
           }
        break;
        case SWT.Dispose:
           event.widget.removeListener(SWT.KeyDown, textInputMask);
           event.widget.removeListener(SWT.Dispose, disposeTextInputMask);
        break;
     }
  }

}

References