使用正则表达式允许文本字段中的某些字符

Allow certain characters in text field with regex

我对如何使用正则表达式在文本字段中只允许三个特定字符进行了很长时间的研究,但我无法找到解决方案。

我尝试的方法是替换任何不是 +()(空格)或一个数字。

我尝试过的正则表达式如下:

(^[\+\(\)\s0-9]+)

但不起作用。不知道我说的对不对

我将上面的正则表达式理解为:如果字符串包含 ^ 的字符,则它不是 +() 0-9

之间的数字

然后在我的 Javascript 中执行以下操作:

var $text  =   $('#text_field');

if(0 < $text.length)
{
    $text.on(
        'keyup',
        function(e)
        {
            var $val = $(this).val();

            $val = $val.replace(/(^[\+\(\)\s0-9]+)/, '');

            $(this).val($val);
        }
    );
}

但不幸的是,这不起作用。

有人可以帮我吗?

我也尝试了以下方法:

^(^[\+\(\)\s0-9]+)$
(^[\+\(\)\s\d]+)
^(^[\+\(\)\s\d]+)$

但还是不行。

你应该把 ^ 移到字符 class 中。

也就是

/[^\d)(+ ]/
  • [^\d)(+ ] 否定字符 class。匹配除 class.
  • 中的任何字符

字符class外^充当锚点,匹配字符串的开头。一旦它被移动到字符 class 中,它就会否定从而匹配反向。

测试

"asdf123(+123) 1234asdf".replace(/[^\d)(+ ]/g, "");
=> 123(+123) 1234

Regex Demo

问题是您需要在方括号内包含 ^。另外,你应该 运行 它是全局的,因此 replace(/([^\+\(\)\s0-9]+)/g, "") 应该可以工作。