朋友,
我是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.001,000.00保留为1,000.00
为混乱道歉!
答案 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]+)$
如果此正则表达式匹配,您知道您的号码有效。然后用空字符串替换所有逗号。
答案 2 :(得分:1)
在我看来,你有三个错误条件
如果其中任何一个为真,那么你应该拒绝该字段,如果它们都是假的,那么你可以用正常的方式去掉逗号并继续前进。这可以是一个简单的替换:
^,|,,|,$
答案 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"]