我在javascript中使用正则表达式,只允许使用数字和两种分隔符","或"。"这个正则表达式如下:
/^[0-9]+([,.][0-9]+)?$/g
现在,强制要求用户尝试输入字符或除数字之外的其他内容,或者。隔离器阻止他。更具体地说,如果用户键入123asv
,我应该只显示123.
所以我写了这个:
value.replace(/[0-9]+([,.][0-9]+)?$/g, '');
但这不允许输入号码。这是合理的,因为我将每个与上述正则表达式匹配的值替换为空格。如何编辑它以实现所需的功能?
答案 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