使用正则表达式和Javascript替换方法

时间:2009-04-20 10:16:42

标签: javascript regex

朋友,

我是Javascript和正则表达式的新手,希望你能提供帮助!

在Javascript函数中,我需要检查逗号(,)是否出现1次或更多次。如果确实如此,那么它的任何一侧都应该有一个或多个数字。

e.g。

1,000.00没问题

1,000,00没问题

,000.00不行

1,000.00不行

如果满足这些条件,我希望删除逗号,以便1,000.00变为1000.00

我试过的是:

var x ='1,000.00';

var regex = new RegExp(“[0-9] +,[0-9] +”,“g”);

var y = x.replace(regex,“”);

警报(Y);

运行时警报显示“.00”这不是我期望或想要的!

提前感谢您提供的任何帮助。

强文 编辑 强文

感谢大家到目前为止的输入和给出的3个答案。不幸的是,我认为我没有充分解释我的问题。

我想要实现的目标是:

如果文本中有逗号,并且在其两侧有一个或多个数字,则删除逗号,但保留字符串的其余部分。

如果文本中有逗号且其中任何一侧至少没有一个数字,则不执行任何操作。

所以使用上面的例子:

1,000.00变为1000.00

1,000,00变为100000

<00>,000.00保留为,000.00

1,000.00保留为1,000.00

为混乱道歉!

5 个答案:

答案 0 :(得分:4)

如果订单高于1000,那么正则表达式不会非常灵活,并且输入中没有逗号的问题也是如此。更有问题的是,您还要匹配并替换您感兴趣的部分数据!

最好有一个匹配问题的表单的正则表达式并删除它们。

以下匹配(按顺序)在输入开头,输入结尾处的逗号,前面有许多非数字,或后跟一些非数字。

var y = x.replace(/^,|,$|[^0-9]+,|,[^0-9]+/g,'');

顺便说一句,如果您碰巧能够lookbehind,但几乎每个JS实现都没有这样做,那么所有这些都会更容易。

根据问题更新进行修改:

好的,我不会试图理解为什么你的规则是这样的,但正则表达式更容易解决它:

var y = x.replace(/(\d),(\d)/g, '$1$2');

答案 1 :(得分:2)

我会使用以下内容:

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)$
  • [0-9] {1,3}:1到3位
  • (,[0-9] {3})*:[可选]用逗号分隔的更多数字三元组
  • (\。[0-9] +):[可选]点+更多数字

如果此正则表达式匹配,您知道您的号码有效。然后用空字符串替换所有逗号。

答案 2 :(得分:1)

在我看来,你有三个错误条件

  1. ”,1000"
  2. “1000,”
  3. “1,000”
  4. 如果其中任何一个为真,那么你应该拒绝该字段,如果它们都是假的,那么你可以用正常的方式去掉逗号并继续前进。这可以是一个简单的替换:

    ^,|,,|,$
    

答案 3 :(得分:1)

我会删除除数字和小数点分隔符([^0-9.])以外的任何内容,并通过parseFloat()发送输出:

var y = parseFloat(x.replace(/[^0-9.]+/g, ""));

答案 4 :(得分:1)

// invalid cases:
// - standalone comma at the beginning of the string
// - comma next to another comma
// - standalone comma at the end of the string
var i,
    inputs = ['1,000.00', '1,000,00', ',000.00', '1,,000.00'],
    invalid_cases = /(^,)|(,,)|(,$)/;
for (i = 0; i < inputs.length; i++) {
    if (inputs[i].match(invalid_cases) === null) {
       // wipe out everything but decimal and dot
       inputs[i] = inputs[i].replace(/[^\d.]+/g, '');
    }
}
console.log(inputs); // ["1000.00", "100000", ",000.00", "1,,000.00"]