2010-02-14 3 views
1

Je permets à un utilisateur d'entrer des dimensions d'une boîte à travers des champs de formulaire. les valeurs admissibles sont:Fonction Javascript impliquant l'utilisation de regex

  1. entiers positifs
  2. doit se terminer par px ou%

Exemples numéros valides sont 300px ou 70%

De plus, je veux placer une validation supplémentaire logique:

Si la valeur entrée est en pourcentage, alors le nombre doit être compris dans la plage 0> x < = 100

Si le nombre entré est en px, je veux pouvoir vérifier les valeurs min et max codées en dur.

Mes connaissances en regex sont assez rares, car je ne l'ai pas utilisé depuis de nombreuses années.

Je suis penser à l'écriture d'un ensemble de fonctions d'aide comme ceci:

// returns true if value ends in px or % [with no spaces], false otherwise 
function is_scale_valid(value){ 
} 

//returns 'px', '%' or undefined 
function get_scale_type(value){ 
} 

// called after is_scale_valid, to ensure we are dealing with 
// a +ve integer that falls in desired range. This function 
// strips away the 'scale' part of the value and only looks 
// at the number 
function is_valid_number(value, scaletype, valid_min, valid_max){ 
} 

quelqu'un peut me aider à remplir ces fonctions d'aide?

Répondre

2

L'expression régulière que vous voulez est:

var r = new RegExp("^\\s*(\\d+(?:\\.\\d+)?)\\s*(px|%)?\\s*$"); 

Cette expression signifie:

  • Allow tête et de queue blanche (\s);
  • Le nombre est un ou plusieurs chiffres éventuellement suivi d'une période et d'un ou plusieurs chiffres;
  • Les unités peuvent être "px", "%" ou être exclues.

Vous devrez vérifier manuellement le numéro saisi à partir de cela.

var match = r.exec("93px"); 
var number = parseFloat(match[1]); 
var symbol = match[2]; 
if (symbol == "px") { 
    // validate number as a pixel 
} else if (symbol == "%") { 
    // evaluate as percentage 
} else { 
    // no symbol was entered 
} 
+0

Merci Cletus, j'ai modifié le code et l'ai testé avec succès –