12
votes

Comment puis-je ajouter une virgule pour séparer chaque groupe de trois chiffres dans un champ de saisie de texte?

J'ai un champ de saisie de texte pour un formulaire où les utilisateurs sont censés entrer un numéro. Je voudrais insérer automatiquement une virgule après chaque troisième chiffre.

Par exemple, entrer dans "20" entraînerait "20". Entrer dans '100' entraînerait «100». Mais s'ils devaient entrer «1000», une virgule serait insérée entre les 0 et les 0 suivants (par exemple, 1 000). Évidemment, ce comportement continuerait si le nombre atteint 7 chiffres (par exemple, 1 000 000).

Y a-t-il un moyen facile de faire cela? Je suis un peu de nouveaub dans tout cela, alors s'il vous plaît répondez comme si vous parlez à un enfant :)


1 commentaires

Le moyen le plus rapide est numéro.tolocalestring ("fr");


10 Réponses :


1
votes
function addCommas(nStr){
        nStr += '';
        x = nStr.split('.');
        x1 = x[0];
        x2 = x.length > 1 ? '.' + x[1] : '';
        var rgx = /(\d+)(\d{3})/;
        while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
        return x1 + x2;
}
Pass the value of the input into function and set the input with the result returned.  You can bind this to an onchange event.Here is a working example that relies on jquery to bind the change event and set the value: http://jsfiddle.net/TYyfn/Comma script is from: http://www.mredkj.com/javascript/nfbasic.html

1 commentaires

Cela ressemble à ce que je veux, mais je ne suis pas de haut sur mon javascript! Est-ce que je viens de créer un nouveau fichier JS avec ça? Comment puis-je le lier à un événement ONCHANGE? Désolé d'être une blonde stupide



1
votes

Oui, ce n'est pas terriblement difficile. Je crois Cette référence peut vous donner ce dont vous avez besoin.

Notez que pour que cela soit dynamique (comme ils tapez), vous auriez besoin d'avoir ceci câblé au gestionnaire de changement de champ de saisie. Sinon, vous pouvez filer ceci au gestionnaire de flou de champ de saisie (qui aura pour effet de mettre les virgules sur le terrain lorsqu'ils quittent le champ).


1 commentaires

Hé là-bas, j'aime l'idée de travailler comme ils tapent. L'exemple de KMB385 est sympa mais doit être flou (quoi que ce soit), car cela ne fonctionne que lorsque vous avez cliqué sur le champ. Pouvez-vous me donner un peu plus de détails sur la façon dont je vais faire ce travail. Je n'ai vraiment aucune idée de JavaScript que d'incluant les scripts que quelqu'un m'a donné dans un didacticiel qui est très visé au débutant total. Merci :)



0
votes
function addCommas(nStr){
    var offset = nStr.length % 3;
    if (offset == 0)
        return nStr.substring(0, offset) + nStr.substring(offset).replace(/([0-9]{3})(?=[0-9]+)/g, "$1,");
    else
        return nStr.substring(0, offset) + nStr.substring(offset).replace(/([0-9]{3})/g, ",$1");
}


alert(addCommas("1234567"));

2 commentaires

Cette réponse a l'air sympa et petite (et donc moins intimidante pour moi). Mais je n'ai pas d'idée de quoi faire avec ça :(


Cela ne fonctionne pas ... Je reçois '123 456,7' quand il devrait être "1 234 567"



0
votes

Essayez cela: cela peut avoir besoin d'un peu de sweeking.

  1. Prenez la fonction d'en haut: Fonction addCommas (NStr) {...} et mettez dans un fichier JS.

  2. Ajouter un lien de script dans la page En-tête de la bibliothèque de JQuery avec: src = "http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"

  3. Assurez-vous que votre boîte de texte a une carte d'identité unique. ex: id = "virgule_input".

  4. dans le même fichier JS Ajouter XXX


0 commentaires

8
votes

Le JavaScript suivant: xxx

et le suivant HTML: xxx

devrait résoudre votre problème. La clé est d'utiliser 'OnKeyUp'.

Essayez ici ici http://jsfiddle.net/yusph/


1 commentaires

Ne fonctionne pas lorsque vous devez modifier au milieu du curseur, saute à la fin après avoir remplacé la valeur d'entrée.



4
votes

Pour le plaisir de celui-ci:

'9876543210'
    .split('') // flip the entire string so that we can break every
    .reverse() //   3rd digit, starting from the end
    .join('')
    .split(/(...)/) // split on every 3rd
    .reverse()      // flip the string again, though now each group of 3 is
    .join(',')      //   backwards
    .replace(/,(?=,)|,$|^,/g, '') // remove extra ,
    .replace(/(,|^)(\d)(\d)?(\d)?/g, '$1$4$3$2') // flip each group of digits
// 9,876,543,210


1 commentaires

Plus simple: "1234567" .Split (''). Reverse (). Rejoindre (''). Remplacer (/ (. {3}) / g, 'Remplacer (/, $ /, '') .Split (''). Inverser () .join ('')



0
votes

Vous pouvez utiliser des fonctions JavaScript Standart. Exemple ici; http://jsfiddle.net/azur/jd5pa/ xxx


2 commentaires

S'il vous plaît mentionner que votre solution nécessite jQuery


Merci pour votre rappel, j'ai supprimé la nécessité de la bibliothèque. La solution est maintenant pure JS.



0
votes

Une autre façon de le faire, pas de regex, juste une manipulation de tableau: xxx

Assurez-vous de passer une chaîne à la fonction xxx


0 commentaires

0
votes

Solution de chaîne simple dans pure JS : xxx

démo: http://jsfiddle.net/kevinvanlierde/tyyfn/141/


0 commentaires

0
votes
var formatNumber = function(num, type) {
    var numSplit, int, dec, type;

    num = Math.abs(num);
    num = num.toFixed(2);

    numSplit = num.split('.')

    int = numSplit[0];
    if (int.length >= 3) {
        int = int.substr(0, int.length - 3) + ',' + int.substr(int.length - 3, 3);
    }

    dec = numSplit[1];

    return (type === 'exp'? sign = '-' : '+') + ' ' + int + '.' + dec;
};

0 commentaires