我已经做了很长时间的研究,如何通过使用正则表达式只允许在文本字段中允许三个特定字符,但我无法解决问题。
我尝试的方法是替换不是+
,(
,)
,(空格)或数字的任何字符。
我试过的正则表达式如下:
(^[\+\(\)\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]+)$
但仍然没有工作。
答案 0 :(得分:2)
您应该将^
移动到角色类中。
那是
/[^\d)(+ ]/
[^\d)(+ ]
否定字符类。匹配班级中任何角色以外的任何角色。在角色类^
之外充当锚,它匹配字符串的开头。一旦它被移入字符类,它就会否定,从而匹配反向。
<强>测试强>
"asdf123(+123) 1234asdf".replace(/[^\d)(+ ]/g, "");
=> 123(+123) 1234
答案 1 :(得分:2)
问题是您需要在方括号内放置^
。此外,您应该全局运行它,因此replace(/([^\+\(\)\s0-9]+)/g, "")
应该可以运行。