Expresión regular para Java FX , número de 0 – 5 con decimales incluidos

publicado por: Anonymous

Buenas tardes estoy realizando una pequeña aplicación en Java Fx y necesito validar uno de los campos , de manera que :

  • Se admita solo un número del 0 a 5 [0-5] y que puedan incluir decimales (4.55,2.25 …).

¿Sería lo más efectivo realizar una expresión regular? o ¿ Debería validarlo de alguna otra manera?.

En tal caso , ¿como sería la expresión ? con : ^(d|-)?(d|,).?d$
me aseguro de que solo se inserten números incluidos decimales, pero como podría modificarla para el rango 0-5? , un saludo y gracias de antemano.

solución

Este método te agregar una validación a la entrada en el TextField, evitando que se introduzcan valores no deseados. Si te das cuenta, se utiliza una expresión regular que permita introducir solo números decimales con punto y adicionalmente se utiliza un valor máximo para evitar que la entrada sea mayor a lo que se desea. Siempre puede modificar el código para que se ajuste mejor a tus necesidades. Este código también valida entradas a través de Ctrl + V.

public void addValidator() {
    final String pattern = "^(\d)+(\.?\d*)?$";
    final int maxValue = 5;

    textField.setOnKeyPressed(event -> {
        if (event.getCode() == KeyCode.V) {// Esto es para impedir el Ctrl + V de texto en los campos numéricos
            String textToPaste = Clipboard.getSystemClipboard().getString();

            if (textToPaste != null && !textToPaste.isEmpty()) {
                String newText = textField.getText() + textToPaste;

                if (!newText.matches(pattern) || Double.parseDouble(newText) > maxValue) {
                    event.consume();
                }
            } else {
                event.consume();
            }
        }
    });

    textField.setOnKeyTyped(event -> {
        String newText = textField.getText() + event.getCharacter();
        if (!newText.matches(pattern) || Double.parseDouble(newText) > maxValue) {
            event.consume();
        }
    });
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *