2011-07-27 3 views
0

Je cours le javascript suivant dans un Chrome. Cela donne une chaîne vide quand je m'attends à "123456.78".Javascript Regex Exec ne correspond pas

var amt = "$123,456.78"; 
digitRegex = /(\d|\.)*/ 
amtarr = digitRegex.exec(amt); 
amtstr = amtarr.join(""); 
alert(amtstr); 

Des idées?


CODE FINAL UP ÊTRE CE TERMINÉ:

moneyRegex = /^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{1,2})?$/ 
    amt = $("#txtAmt").val(); 
    amtok = (amt.search(moneyRegex) != -1); 
    amtval = 0; 
    if (amtok == true) { 
     digitRegex = /[\d\.]+/g 
     amtarr = digitRegex.exec(amt); 
     amtstr = amtarr.join(""); 
     alert(amtstr); 
    } 

Répondre

1

Vous pouvez essayer avec

digitRegex = /(\d|\.)*/g 

pour obtenir tous les matchs. Vous pouvez également utiliser:

digitRegex = /[\d\.]+/g 

ce qui devrait être bon pour ce que vous essayez de faire.

+0

Merci @sergio, c'est fait. Manquer le drapeau mondial était l'astuce. – sisdog

3
amtstr = amt.replace(/[$,]/g, ""); 

vous donnera ce que vous voulez. Il supprime les virgules et le signe dollar de votre chaîne, laissant 123456.78.

+1

Ou, selon le contexte, vous pourriez considérer amt.replace (/[ ^\d.]/g, '') qui supprimera tous les caractères qui ne sont pas des chiffres ou '.' – HBP

+0

+1 Merci @Tim, j'aimerais pouvoir vérifier à la fois votre réponse et sergio. – sisdog

0

Je ne sais pas pourquoi * ne retourne pas de résultat, changez-le en + et cela fonctionnera.

Mais il y a un autre bug dans votre code.

digitRegex.exec(amt); 

retourne un tableau, mais il ne contient que le premier match et la position de l'autre et quelques autres trucs. See here mozilla.org

Vous devez appeler exec jusqu'à ce qu'il retourne null pour obtenir tous les matchs et seulement le premier élément du tableau contient votre match.

var amt = "$123,456.78"; 
digitRegex = /(\d|\.)+/g; 
var result = new Array(); 
while ((amtarr = digitRegex.exec(amt)) != null) 
{ 
result.push(amtarr[0]); 
} 

amtstr = result.join(""); 
alert(amtstr);