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



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

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

现在,如果用户尝试输入字符或除数字以外的其他内容,则必须使用 、 或 . 分隔符来防止他。更具体地说,如果用户键入123asv我应该只显示 123。

所以我写了这个:

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

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

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

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

[^d,.]+模式匹配 1 个或多个不是数字、.,的字符,并且g修饰符匹配多个匹配项。请参阅此正则表达式演示。

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

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

请参阅此正则表达式演示。[.,](?=.*[,.])匹配一个,.,后跟除换行符以外的任何 0+ 字符,然后是另一个,.,但仅删除第一个匹配的.,,因为(?=...)前瞻是非消耗性构造。

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

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

不要将全局修饰符与RegExp#test()方法一起使用。

相关内容

最新更新