有没有办法否定任何正则表达式?我正在使用正则表达式来验证表单上的输入。我现在正在尝试创建一个清理我输入的按钮。有没有办法让我可以使用用于验证的正则表达式来剥离无效字符?
我正在使用此正则表达式来验证非法字符
<input data-val-regex-pattern="[^|<>:\?'\*\[\]\=%\$\+,;~&\{\}]*" type="text" />
点击旁边的按钮时,我正在调用此功能:
$('#button').click(function () {
var inputElement = $(this).prev();
var regex = new RegExp(inputElement.attr('data-val-regex-pattern'), 'g');
var value = inputElement.val();
inputElement.val(value.replace(regex, ''));
});
目前,javascript与我正在努力实现的完全相反。我需要找到一种“逆转”正则表达式的方法。
编辑:我正试图在javascript函数中反转正则表达式。 data-val-regex-pattern
- 属性中的正则表达式正在完成验证工作。
答案 0 :(得分:2)
要查找无效字符,只需从正则表达式中取消^
即可。 carret是括号内所有东西的负面信息。
data-val-regex-pattern="[|<>:\?'\*\[\]\=%\$\+,;~&\{\}]*"
这将返回不需要的字符,以便您可以替换它们。
另外,由于你想要删除很多非单词字符,你可以试试一个更简单的正则表达式。如果你只想要单词字符和空格,你可以使用这样的东西:
data-val-regex-pattern="[\W\S]*"
答案 1 :(得分:1)
以下答案是否定正则表达式的一般问题。在你的特定情况下,你只需要否定一个角色组,或者更确切地说是删除一个角色组的否定 - 这在其他答案中有详细说明。
常规语言 - 完全由匹配一些RE组成的所有字符串 - 实际上在否定时关闭:是另一个RE,它与原始RE不匹配的那些字符串完全匹配。然而,构造并不简单,这或许可以解释为什么RE实现通常不提供否定运算符。
然而,Javascript正则表达式语言具有扩展,使其比常规语言更具表现力;尤其是负面前瞻的结构。
如果R1
是正则表达式,那么
^(?!.*(R1))
精确匹配不包含R1匹配的字符串。
和
^(?!R1$)
精确匹配整个字符串与R1不匹配的字符串。
IE中。否定。
为了重写任何与给定正则表达式不匹配的子字符串,上述内容不足。一个人必须做类似
的事情((?!R1).)*
哪个子串会捕获不包含匹配R1
的子子串的子串。 - 但是对边缘案例的考虑表明,这并不是我们所追求的。例如,((?!ab).)*
匹配&#34; b&#34;在&#34; ab&#34;,因为&#34; ab&#34;不是&#34; b&#34;的子字符串。
一个人可以作弊,并使你的正则表达式;
(.*)(R1|$)
并重写为T1$2
其中T1
是您要重写的目标字符串。
这应该重写不匹配R1
到T1
的字符串的任何部分。但是,对于任何边缘情况,我会非常小心。因此,从头开始编写正则表达式而不是尝试一般方法可能会更好。
答案 2 :(得分:1)
你的意志如下:
[^|<>:\?'\*\[\]\=%\$\+,;~&\{\}]*
这意味着,它会多次匹配任何非无效字符。
然后你将它替换为空,所以你只留下不好的字符。
尝试这一点,没有否定(帽子移动到其他地方):
[|^<>:\?'\*\[\]\=%\$\+,;~&\{\}]*