2012-03-18 2 views
25

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

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

+1

Самый простой способ здесь - использовать регулярное выражение – aurbano

+0

От чего? Поле ввода? –

ответ

35
> '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).

+0

спасибо. Я использовал только первую строчку, но все это, вероятно, поможет мне в будущем. – lisovaccaro

3

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