web-dev-qa-db-fra.com

Expressions régulières Javascript - Remplacer les caractères non numériques

Cela marche:

var.replace(/[^0-9]+/g, '');  

Ce simple extrait remplacera tout ce qui n’est pas un nombre avec rien.

Mais les nombres décimaux sont également réels. Donc, j'essaie de comprendre comment inclure une période.

Je suis sûr que c'est très simple, mais mes tests ne fonctionnent pas.

57
coffeemonitor

Avez-vous échappé à la période? var.replace(/[^0-9\.]+/g, '');

86
Jacob Mattison

Remplacer quelque chose qui n'est pas un nombre est un peu plus compliqué que de remplacer quelque chose qui est un nombre.

Ceux qui suggèrent d'ajouter simplement le point ignorent le fait que. est également utilisé comme période, donc:

This is a test. 0.9, 1, 2, 3 deviendra .0.9123.

La regex spécifique à votre problème dépendra beaucoup du but recherché. Si vous n'avez qu'un seul numéro dans votre chaîne, vous pouvez faire ceci:

var.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1")

Cela trouve le premier numéro et remplace la chaîne entière par le numéro correspondant.

8
Jeff B

Essaye ça:

var.replace(/[^0-9\\.]+/g, '');
5
Levi Hackwith

Essaye ça:

var.replace(/[0-9]*\.?[0-9]+/g, '');

Cela correspond uniquement aux décimales valides (par exemple, "1", "1.0", ".5", mais pas "1.0.22")

2
Eric

Si vous ne voulez pas attraper l'adresse IP avec des décimales:

var.replace(/[^0-9]+\\.?[0-9]*/g, '');

Ce qui n'accroche que des chiffres avec une ou zéro période

2
dkinzer

Pourquoi ne pas faire ceci:

var numbers = str.gsub(/[0-9]*\.?[0-9]+/, "#{0} ");
0
Eric

il y a déjà beaucoup de réponses correctes, soulignant simplement que vous devrez peut-être aussi prendre en compte les signes négatifs. "\-" ajoutez cela à toute réponse existante pour permettre les nombres négatifs. 

0
gm77

Voici quelques types de classes d’entrée jQuery que j’utilise:

$("input.intgr").keyup(function (e) { // Filter non-digits from input value.
    if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, ''));
});
$("input.nmbr").keyup(function (e) { // Filter non-numeric from input value.
    var tVal=$(this).val();
    if (tVal!="" && isNaN(tVal)){
        tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, ''));
        var raVal=tVal.split(".")
        if(raVal.length>2)
            tVal=raVal[0]+"."+raVal.slice(1).join("");
        $(this).val(tVal);
    } 
});

intgr n'autorise que les solutions numériques - comme ici.

nmbr n'autorise que les décimales positives/négatives. Le négatif doit être le premier caractère (vous pouvez ajouter "+" au filtre si vous en avez besoin), enlève -3.6.23.333 à -3.623333

Je mets nmbr up parce que j'en avais marre d'essayer de trouver le moyen de ne garder que 1 décimale et négatif en 1ère position

0
gordon

Doux et court remplacement en ligne des caractères non numériques dans la zone de texte ASP.Net:

 <asp:TextBox ID="txtJobNo" runat="server" class="TextBoxStyle" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" />

Modifiez la partie regex comme vous le souhaitez. Beaucoup de gens se plaignent du fait que le curseur va droit au but en utilisant les touches fléchées, mais les gens ont tendance à gérer cela sans s'en rendre compte, par exemple, flèche ... flèche ... flèche ... flèche ... d'accord alors ... backspace back space, entrez les nouveaux caractères.

0
Pierre