我在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()
方法一起使用。