J'ai besoin d'une fonction qui supprime tous les caractères sauf les chiffres et les caractères : '$', '.' et ','.
Comment puis-je le faire ?
J'ai besoin d'une fonction qui supprime tous les caractères sauf les chiffres et les caractères : '$', '.' et ','.
Comment puis-je le faire ?
> 'worth $12,345.00 dollars'.replace(/[^0-9$.,]/g, '')
"$12,345.00"
C'est la réponse que vous avez demandée. Je ne le recommande pas pour l'extraction de devises, car il peut souffrir de problèmes comme celui-ci :
> 'A set of 12 worth between $123 and $456. A good buy.'.replace(/[^0-9$.,]/g, '')
"12$123$456.."
Si vous voulez juste extraire les expressions d'une forme similaire à la monnaie, vous pouvez le faire :
> 'set of 12 worth between $123.00 and $45,678'.match(/\$[0-9,]+(?:\.\d\d)?/g)
["$123.00", "$45,678"]
Si vous avez besoin d'une correspondance plus complexe (par exemple, si vous souhaitez simplement extraire la valeur en dollars et ignorer la valeur en cents), vous pouvez faire quelque chose comme suit Comment accéder aux groupes correspondants dans une expression régulière JavaScript ? par exemple :
> var regex = /\$([0-9,]+)(?:\.(\d\d))?/g;
> while (true) {
> var match = regex.exec('set of 12 worth between $123.00 and $45,678');
> if (match === null)
> break;
> console.log(match);
> }
["$123.00", "123", "00"]
["$45,678", "45,678", undefined]
(Donc attention, les objets javascript regexp ne sont pas des objets immuables/finaux, mais ont un état et peuvent être utilisés pour l'itération comme démontré ci-dessus. Vous ne pouvez donc pas "réutiliser" un objet regexp. Même en passant myRegex2 = RegExp(myRegex)
mélangera l'état ; une très mauvaise décision linguistique pour le constructeur. Voir l'addendum sur la façon de cloner correctement les regex en javascript). Vous pouvez réécrire ce qui précède comme un for-loop très exotique si vous le souhaitez :
var myString = 'set of 12 worth between $123.00 and $45,678';
var regex = '\$([0-9,]+)(?:\.(\d\d))?';
for(var match, r=RegExp(regex,'g'); match=regex.exec(myString) && match!==null; )
console.log(match);
addendum - Pourquoi vous ne pouvez pas réutiliser les objets RegExp en javascript
Mauvaise conception du langage, démontrant comment l'état est réutilisé :
var r=/(x.)/g
var r2 = RegExp(r)
r.exec('xa xb xc')
["xa", "xa"]
r2.exec('x1 x2 x3')
["x2", "x2"]
Comment cloner correctement une regex en javascript (vous devez la définir avec une chaîne) :
var regexTemplate = '(x.)'
var r = RegExp(regexTemplate, 'g')
var r2 = RegExp(regexTemplate, 'g')
r.exec('xa xb xc')
["xa", "xa"]
r2.exec('x1 x2 x3')
["x1", "x1"]
Si vous souhaitez préserver de manière programmatique des indicateurs tels que 'g'
vous pouvez probablement utiliser regexTemplate = ['(x.)', 'g']; RegExp.apply(this, regexTemplate)
.
Si vous ne voulez pas permettre à quelqu'un de taper de telles valeurs dans une zone de texte, alors jQuery Numeric est un plugin sympa qui fait exactement ce que vous voulez,
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.