删除除点号,逗号和'$'之外的非数字字符吗?

删除除点号,逗号和'$'之外的非数字字符吗?

问题描述:

我需要一个函数来删除除数字+字符以外的所有字符:'$','。'和','。

我怎样才能做到这一点?

+1

这里最简单的方法是使用正则表达式 – aurbano 2012-03-18 18:59:18

+0

从什么?输入字段? – 2012-03-18 19:00:15

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

(因此要小心,JavaScript正则表达式对象不是不可变/最终对象,但具有状态并可用于迭代,如上所示。因此,您不能“重用”正则表达式对象。即使传球myRegex2 = RegExp(myRegex)将混合状态;对构造者来说这是一个非常糟糕的语言决策。参见如何在javascript正确克隆正则表达式的附录)你可以把上面的是一个非常奇特的for循环,如果你想:

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的正则表达式对象

脏话的设计,展示出状态如何重用:

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 2012-03-19 02:27:35

如果你不想让别人在文本框中键入这样的值,然后jQuery Numeric是一个很好的插件,不正是你想要什么,