【问题标题】:Remove non-numeric characters except points, commas and '$'?删除除点、逗号和“$”之外的非数字字符?
【发布时间】:2012-03-18 18:58:24
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 这里最简单的方法是使用正则表达式

标签: javascript jquery


【解决方案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"]

如果您需要更复杂的匹配(例如,您只想提取美元值并忽略美分值),您可以执行类似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 regexp 对象不是不可变/最终对象,但具有状态并可用于迭代,如上所示。因此,您不能“重用”regexp 对象。即使传递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 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 是一个不错的插件,可以完全满足您的需求,

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2017-03-03
    • 2015-10-16
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多