6

我试图只允许数字和特殊字符,如“。” 和“,”在我的文本字符串中被允许。为此我尝试了以下代码

var pattern = /[A-Za-z]/g;
var nospecial=/[\(#\$\%_+~=*!|\":<>[\]{}`\\)';@&?$]/g;
if (!ev.ctrlKey && charCode!=9 && charCode!=8 && charCode!=36 && charCode!=37 && charCode!=38 && (charCode!=39 || (charCode==39 && text=="'")) && charCode!=40) {
    console.log(text);
    if (!pattern.test(text) && !nospecial.test(text)) {
        console.log('if');
        return true;
    } else {
        console.log('else');
        return false;
    }
}

但没有得到想要的输出。告诉我哪里错了。

4

5 回答 5

24

忘记尝试列入黑名单,只需这样做以允许您想要的:

var pattern = /^[0-9.,]*$/;

编辑:另外,不仅仅是检查数字、逗号和点。我假设这样的事情比你希望的还要多:

var pattern = /^(0|[1-9][0-9]{0,2}(?:(,[0-9]{3})*|[0-9]*))(\.[0-9]+){0,1}$/;

演示

在此处输入图像描述

于 2013-04-17T12:36:47.963 回答
5

那么你为什么不尝试/^[0-9,.]*$/而不是否定测试呢?

于 2013-04-17T12:37:52.923 回答
2

你可以试试这个:

/([0-9]+[.,]*)+/

它将匹配带有或不带有逗号或点的数字。

于 2016-10-10T08:52:11.133 回答
0

您也可以只使用此答案中的解决方案:

parseFloat(text.replace(',',''));
于 2014-10-29T20:53:42.033 回答
0
^(?!.*[^0-9.,\n]).*$

不确定您所说的高效是什么意思,但是尽管匹配正确的字符串需要很长时间,但失败的速度更快。请参阅演示。

http://regex101.com/r/aK2zV7/1

于 2014-10-27T16:00:30.400 回答