Подтвердить что ты не робот

Удалить нечисловые символы, кроме точек, запятых и "$"?

Мне нужна функция для удаления всех символов, кроме чисел + символов: '$', '.' и ','.

Как я могу это сделать?

4b9b3361

Ответ 1

> 'worth $12,345.00 dollars'.replace(/[^0-9$.,]/g, '')
"$12,345.00"

Это ответ, который вы просили. Я бы не рекомендовал его для извлечения валют, так как он может страдать от таких проблем:

> 'A set of 12 worth between $123 and $456. A good buy.'.replace(/[^0-9$.,]/g, '')
"12$123$456.."

Если вы хотите просто извлечь выражения в форме, подобной валюте, вы можете сделать:

> 'set of 12 worth between $123.00 and $45,678'.match(/\$[0-9,]+(?:\.\d\d)?/g)
["$123.00", "$45,678"]

Если вам требуется более сложное сопоставление (например, вы просто хотите извлечь значение доллара и проигнорировать значение центра), вы можете сделать что-то вроде Как получить доступ к сопоставленным группам в регулярное выражение JavaScript?:

> 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]

(Таким образом, будьте осторожны, объекты regexp javascript не являются неизменяемыми/конечными объектами, но имеют состояние и могут использоваться для итерации, как показано выше. Таким образом, вы не можете "повторно использовать" объект регулярного выражения. Даже переход myRegex2 = RegExp(myRegex) будет смешивать состояние; очень плохое языковое решение для конструктора. См. добавление о том, как правильно клонировать регулярные выражения в javascript.) Вы можете переписать вышеуказанное как очень экзотическое для цикла, если хотите:

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 - Почему вы не можете повторно использовать объекты JavaScript RegExp

Плохой дизайн языка, демонстрирующий, как состояние используется повторно:

var r=/(x.)/g
var r2 = RegExp(r)

r.exec('xa xb xc')
["xa", "xa"]
r2.exec('x1 x2 x3')
["x2", "x2"]

Как правильно клонировать регулярное выражение в javascript (вы должны определить его со строкой):

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"]

Если вы хотите программно сохранить флаги, такие как 'g', вы, вероятно, можете использовать regexTemplate = ['(x.)', 'g']; RegExp.apply(this, regexTemplate).

Ответ 2

Если вы не хотите, чтобы кто-то вводил такие значения в текстовое поле, jQuery Numeric - это хороший плагин, который делает именно то, что вы хотите,