44 votes

Comment supprimer les lettres, les tirets et les signes du dollar dans une chaîne de caractères à l'aide d'une expression régulière ?

J'essaie de trouver toutes les lettres, les tirets et les signes du dollar et de les supprimer d'une zone de texte.

function numbersOnly()
{
    if ($('.sumit').val().indexOf([A-Za-z-$])) {
        $('.sumit').val().replace([A-Za-z-$], "");
    }
}

C'est ce que j'ai obtenu et je suis presque sûr que c'est faux. Je ne suis pas très doué avec les expressions régulières, mais j'essaie de les apprendre. Est-ce que quelqu'un veut m'aider et me faire commencer à compléter cette fonction ?

Donc Vous avez les entrées.

<div class="numInputRight"><input type="text" class="sumit" name="sumAmount1"></div>
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount2"></div>
<div class="numInputRight"><input type="text" class="sumit" name="sumAmount3"></div>

Ensuite, vous avez la fonction :

numbersOnly = function()
{
  $('.sumit').val().replace(/[A-Za-z$-]/g, "");
  alert($('.sumit').val());
  return false;
}   

Je lance une alerte pour déterminer si le remplacement fonctionne. Ce n'est pas le cas.

149voto

Mark Biek Points 41769

Ceci devrait suffire

$('.sumit').val().replace(/[^\d.]/g, "");

En [^] est une classe de caractères annulée, elle va donc correspondre à tous les caractères sauf ceux énumérés dans la classe de personnage.

Dans ce cas, notre classe de caractères est \d (qui correspond aux chiffres de 0 à 9) et un point (pour autoriser les nombres décimaux).

Je préfère cette approche parce qu'elle permet d'attraper n'importe quoi qui n'est pas numérique plutôt que d'avoir à énumérer explicitement les caractères non numériques que je ne veux pas.

Si vous vraiment ne veut exclure que les lettres, $ et -, alors Sean's est une meilleure façon de procéder.

26voto

Sean Points 3298

Mark's le fait pour tous les chiffres. Si vous souhaitez supprimer uniquement les lettres, les tirets et les $ (tout en laissant les décimales, par exemple), cette modification de l'original devrait suffire :

$('.sumit').val().replace(/[A-Za-z$-]/g, "");

(Et je préfère personnellement la réponse actualisée de Mark pour la même raison que lui : vous attrapez tout ce que vous ne pouvez pas prédire de cette façon).

Pour votre nouvelle question, la raison pour laquelle les valeurs ne changent pas est que val() renvoie une nouvelle chaîne. Elle ne modifie pas la valeur réelle. Pour ce faire, essayez :

$('.sumit').each(function() { 
    $(this).val($(this).val().replace(/[A-Za-z$-]/g, "")); 
});
alert($('.sumit').val());

Je l'ai également transformé en un appel each() afin que chaque élément soit traité individuellement.

7voto

tessi Points 5724

J'aime beaucoup la réponse de Mark. Cependant, en fonction de votre langage de programmation (et de votre moteur RegEx) \d correspond à des caractères comme ४, ou ৮, qui sont Chiffres UTF-8 .

Ainsi, si vous ne voulez que les chiffres de 0 à 9, utilisez [^0-9.] :

$('.sumit').val().replace(/[^0-9.]/g, "");

C'est encore plus rapide si votre moteur RegEx est compatible avec l'UTF-8. Un exemple de langage où cela s'applique est python3 ( http://docs.python.org/3/library/re.html - rechercher " \d "). Les Norme ECMA Cependant, il est dit que pour JavaScript \d égaux [0-9] .

5voto

Mike Grace Points 6718
$('.sumit').val().replace(/\D/g, "");

Remplace toutes les valeurs non numériques de la valeur totale.

1voto

Chaudhry Junaid Points 36

Cela a fonctionné pour moi :

$('.sumit').val().replace(/[^\d]/g, "");

J'ai essayé la réponse de Mike avec la majuscule \D au lieu d'annuler un \d qui, pour une raison quelconque, n'a pas supprimé les parenthèses et autres signes de ponctuation. Négation \d fonctionne parfaitement.

Si vous souhaitez conserver les décimales, vous pouvez également mettre un point et d'autres symboles entre crochets.

PS L'environnement dans lequel j'ai testé était Titanium SDK.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X