在javascript中的Value.replace不允许特定字符

时间:2017-08-11 07:24:02

标签: javascript regex replace

我在javascript中使用正则表达式,只允许使用数字和两种分隔符","或"。"这个正则表达式如下:

/^[0-9]+([,.][0-9]+)?$/g

现在,强制要求用户尝试输入字符或除数字之外的其他内容,或者。隔离器阻止他。更具体地说,如果用户键入123asv,我应该只显示123.

所以我写了这个:

value.replace(/[0-9]+([,.][0-9]+)?$/g, '');  

但这不允许输入号码。这是合理的,因为我将每个与上述正则表达式匹配的值替换为空格。如何编辑它以实现所需的功能?

1 个答案:

答案 0 :(得分:1)

在当前场景中,您需要从输入字符串中删除任何数字,.符号,因为您有额外的代码可以验证/清理额外的逗号/句点:

value = value.replace(/[^\d,.]+/g, '')

[^\d,.]+模式匹配1个或多个不是数字的字符,.,g修饰符匹配多个匹配项。请参阅this regex demo

请注意,如果没有其他代码来验证分隔符,您可以添加一个替代方法来删除所有.,但最后一次出现:

value = value.replace(/[^\d,.]+|[.,](?=.*[,.])/g, '')
                               ^^^^^^^^^^^^^^^ 

this regex demo[.,](?=.*[,.]),.匹配,后跟除了换行符之外的任何0 +字符,然后是另一个,.,但只有第一个匹配的.,已被删除,因为(?=...)前瞻是非消费构造。

然后测试该值是否与数字模式匹配:

if (value.test(/^[0-9]+([,.][0-9]+)?$/)) { ... }

Do not use the global modifier with the RegExp#test() method