2010-12-15 25 views
2

J'ai un champ de saisie, si je veux entrer la valeur de pourcentage ou la quantité plate pour ceci que je dois vérifier qu'il se termine avec le signe de% ou pas.L'expression rationnelle JavaScript pour le numéro de contrôle a le signe% ou pas

entrée

d'échantillon peut être

12% 
12.888% 
12.00% 
12.00001% 
12.123344% 

ou montant forfaitaire

100 
100.55252 
100.254575 

quelque chose comme ça. N.B: Je veux apprendre javascript regex ... avez-vous des suggestions?

+2

Cela n'a rien ** ** à voir avec jQuery. Regex en JavaScript est ** juste JavaScript. ** –

+0

Soyons honnêtes ici. Vérifier si le dernier caractère d'une chaîne est un signe de pourcentage n'a pas forcément grand-chose à voir avec les expressions régulières. –

+0

mais voulez faire avec regex :) –

Répondre

3

jQuery utilise des expressions régulières de JavaScript. Ceci est un bon point de départ https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

Pour votre besoin, /[0-9]*\.?[0-9]+%/ vous sera utile.

+0

son travail ne fonctionne pas :( –

+0

Édité: Si vous voulez que le point (pour le point décimal) soit facultatif, mettez un '?' après lui – dheerosaur

+1

Pourquoi utilisez-vous le '*' sur le premier jeu de caractères, mais un '+' sur le second? Ne correspondrait-il pas à '.99%'? – Pit

2
/%$/.test("35%"); >> true 
/%$/.test("100"); >> false 
/%$/.test("35.555%"); >> true 
/%$/.test("35.555"); >> false 

Jetez un oeil à Mozilla Developer Network pour un peu plus d'informations: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

+0

ce qui se passera pour la validation décimale? –

+0

Ajout des tests pour les décimales. Le $ correspond à la fin d'une ligne, donc si vous mettez des valeurs avant le $, il s'assurera que la ligne se termine avec ces valeurs. Il ne se soucie pas de l'une des autres valeurs sur la ligne. (Gardez à l'esprit que cela fonctionnera pour les nombres et les lettres, donc si vous vouliez y ajouter, vous pourriez avoir la regex pour les nombres et les nombres décimaux seulement) – sioked

+2

/% $ /. Test ("asdfasdfsdf%"); >> vrai cela fonctionne aussi :( –

1

Comme Anon a déjà suggéré, vous n'avez pas vraiment besoin d'utiliser des expressions régulières pour résoudre ce problème. Quel est le problème avec:

var number = "12.888%"; 
if(number[number.length - 1] === '%') { 
    //processing... 
} 
2

Toutes les suggestions précédentes sont excellentes. Selon vos besoins, vous pouvez en choisir un. J'ai ajouté un peu plus à ce qui suit pour répartir la valeur pour vous. Modifiez en fonction de vos besoins.

function getValue(num) { 
    var matches=num.match(/(^\s*\d+\.?\d*)(%)?\s*$/); 
    var m = false, p = false, v = 0; 
    if (matches) { 
     m = true; 
     p = (matches[2]=="%"); 
     v = matches[1]; 
    } 
    return {isMatch: m, isPercent: p, value: v}; 
} 

var vals = "12%,12.888%,12.00%,12.00001%,12.123344%,100,100.,100.55252,100.254575,notnum".split(','); 
for(var i=0;i<vals.length;i++) { 
    var gv = getValue(vals[i]); 
    console.log("string="+vals[i]," isMatch="+gv.isMatch," isPercent="+gv.isPercent," value="+gv.value); 
} 

sortie est:

string=12% isMatch=true isPercent=true value=12 
string=12.888% isMatch=true isPercent=true value=12.888 
string=12.00% isMatch=true isPercent=true value=12.00 
string=12.00001% isMatch=true isPercent=true value=12.00001 
string=12.123344% isMatch=true isPercent=true value=12.123344 
string=100 isMatch=true isPercent=false value=100 
string=100. isMatch=true isPercent=false value=100. 
string=100.55252 isMatch=true isPercent=false value=100.55252 
string=100.254575 isMatch=true isPercent=false value=100.254575 
string=notnum isMatch=false isPercent=false value=0