Мне нужна функция для удаления всех символов, кроме чисел + символов: '$', '.' а также ','.
Как я могу это сделать?
Мне нужна функция для удаления всех символов, кроме чисел + символов: '$', '.' а также ','.
Как я могу это сделать?
> '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"]
Если вам необходимо более сложное согласование (например, вы просто хотите, чтобы извлечь значение доллара и игнорировать значение процента) вы могли бы сделать что-то вроде How do you access the matched groups in a JavaScript regular expression?, например:
> 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 не являются неизменяемыми/конечными объектами, но имеют состояние и могут использоваться для итерации, как показано выше. Таким образом, вы не можете повторно использовать объект regexp. Даже прохождение 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);
добавление - Почему вы не можете повторно использовать. 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)
.
спасибо. Я использовал только первую строчку, но все это, вероятно, поможет мне в будущем. – lisovaccaro
Если вы не хотите, чтобы кто-то набирать такие значения в текстовое поле, то jQuery Numeric хороший плагин, который делает именно то, что вы хотите,
Самый простой способ здесь - использовать регулярное выражение – aurbano
От чего? Поле ввода? –