La convalida del modulo numerico (minima/massima) in JavaScript

Avere uno script che definisce il testo come un numero utilizzando un’espressione regolare:

function validateTextNumericInRange(textInputId)
{
    var numRegex = /^[\d]+$/;
    var textInput = document.getElementById(textInputId);

    var valid = true;
    if (numRegex.test(textInput.value) == false) {
        alert('Value must be a number between 3-48');
        valid = false;
    }
    return valid;
}

Necessario utilizzare questo formato e fornire un min/max portata (arbitrario per ora, diciamo tra i 3 e 48). Come faccio a modificare questa regex per completare e dispone di un argomento corretto?

  • interi e numeri decimali o solo numeri interi?
  • Solo numeri interi – grazie
InformationsquelleAutor Robert | 2011-04-27

 

4 Replies
  1. 11

    Non capisco la tua domanda. Vuoi dire che si desidera un numero compreso tra 3 e 48 cifre, o che il valore per il numero deve essere compreso tra 3 e 48?

    Per questi ultimi non c’è bisogno di una regex:

    function validateTextNumericInRange (textInputId) {
        var textInput = document.getElementById(textInputId);
        var value = parseInt(textInput.value, 10);
    
        return (!isNaN(value) && value >= 3 && value <= 48);
    }

    Una soluzione più generica:

    function validateTextNumericInRange(textInputId, min, max) {
        var textInput = document.getElementById(textInputId);
        var value = parseInt(textInput.value, 10);
    
        return (!isNaN(value) && value >= min && value <= max);
    }

    Di test per vedere se un numero è compreso tra 3 e 48 cifre, è possibile utilizzare le espressioni regolari /^[0-9]{3, 48}$/.

    • Non dimenticate di aggiungere la radice per il tuo parseInt chiamata
    • oops buon punto
    • Andando per un numero compreso tra 3 e 48. Proprio convinto i miei “superiori”, a non utilizzare espressioni regolari per questo compito. Grazie per la soluzione.
    • I vostri superiori voluto utilizzare la regex per questo? O_o
    • Hanno avuto qualche Json regole scritte intorno regex, ma sono riuscito a parlare con loro. La tua soluzione ha funzionato bene ed erano confortevoli, una volta ho dimostrato e spiegato a loro. Grazie!
    • Sembra che si deve accettare questa risposta, @Robert

  2. 8

    Una espressione regolare che sarebbe stata dura e inflessibile, e per il tuo esempio sarebbe:

    /^(?:[3-9]|[1-3][0-9]|4[0-8])$/

    Meglio andare con Vivins’ soluzione.

    • Immagina di avere una stringa che contiene una settimana di numero di anno e si vuole controllare in fase iniziale, prima della conversione ad intero. Il mio caso! Grazie: ^(?:[1-9]|[1-4][0-9]|[5][0-3])$
  3. 3

    Io non sono un buon sviluppatore JavaScript, ma so che in Java è possibile utilizzare questa sintassi per il test di lunghezza minima e massima:

    [1-9][0-9]{2,4}
    [1-9][0-9]{min,max}
  4. 3
    function isInteger(value) {
      if ((value.toString()).replace(/^-\d|\d/, "").length == 0) {
        return true;
      }
      return false;
    }
    
    function integerInRange(value, min, max) {
      if (isInteger(value)) {
        if (parseInt(value, 10) >= min && parseInt(value, 10 <= max)) {
          return true;
        } else {
          return false; //Not in range
        }
      } else {
        return false; //Not an integer
      }
    }
    
    integerInRange( 55,  3, 48); //Returns false
    integerInRange("55", 3, 48); //Returns false
    
    integerInRange( 25,  3, 48); //Returns true
    integerInRange("25", 3, 48); //Returns true

    Nel tuo caso è necessario chiamare in questo modo:

    integerInRange(document.getElementById(textInputId).value, 3, 48);

Lascia un commento