2012-03-18 11 views
25

Potrzebuję funkcji do usunięcia wszystkich znaków oprócz cyfr + znaków: "$", "." i ','.

Jak mogę to zrobić?

+1

Najprostszym sposobem byłoby użycie wyrażenia regularnego – aurbano

+0

Z czego? Pole wejściowe? –

Odpowiedz

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

Jest to odpowiedź prosiłeś. Nie polecam go do wydobywania waluty, ponieważ może cierpieć z powodu problemów takich jak ten:

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

Jeśli chcesz po prostu wydobyć przejawów formie waluty podobny, można zrobić:

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

Jeśli potrzebujesz bardziej skomplikowanego dopasowania (np chcesz po prostu wydobyć wartość dolara i ignorować wartości cent) mógłby zrobić coś jak How do you access the matched groups in a JavaScript regular expression? na przykład:

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

(Tak więc bądź ostrożny, obiekty regexp javascript nie są niezmiennymi/ostatecznymi obiektami, ale mają stan i mogą być użyte do iteracji, jak pokazano powyżej. W ten sposób nie można "ponownie użyć" obiektu regexp. Nawet przekazanie myRegex2 = RegExp(myRegex) spowoduje połączenie stanu; bardzo kiepska decyzja językowa dla konstruktora. Patrz załącznik, w jaki sposób prawidłowo sklonować regexes w javascript) można przepisać powyższe jako bardzo egzotycznych dla pętli, jeśli chcesz:

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); 

aneksu - Dlaczego nie można ponownie wykorzystać. JavaScript RegExp obiektów

Bad projekt językowy, demonstrując jak stan jest wykorzystywany:

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

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

Jak prawidłowo sklonować regex w javascript (ci zdefiniować go sznurkiem):

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

Jeśli chcesz zachować programowo flagi takie jak 'g', prawdopodobnie można użyć regexTemplate = ['(x.)', 'g']; RegExp.apply(this, regexTemplate).

+0

dzięki. Użyłem tylko pierwszej linii, ale prawdopodobnie wszystko to pomoże mi w przyszłości. – lisovaccaro

3

Jeśli nie chcesz, aby ktoś wpisywać takie wartości w polu tekstowym potem jQuery Numeric jest ładny plugin, który robi dokładnie to, co chcesz,

Powiązane problemy