否定随机正则表达式

时间:2014-08-08 12:03:58

标签: javascript regex validation

有没有办法否定任何正则表达式?我正在使用正则表达式来验证表单上的输入。我现在正在尝试创建一个清理我输入的按钮。有没有办法让我可以使用用于验证的正则表达式来剥离无效字符?

我正在使用此正则表达式来验证非法字符

<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 - 属性中的正则表达式正在完成验证工作。

3 个答案:

答案 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是您要重写的目标字符串。

这应该重写不匹配R1T1的字符串的任何部分。但是,对于任何边缘情况,我会非常小心。因此,从头开始编写正则表达式而不是尝试一般方法可能会更好。

答案 2 :(得分:1)

你的意志如下:

[^|<>:\?'\*\[\]\=%\$\+,;~&\{\}]*

这意味着,它会多次匹配任何非无效字符。

然后你将它替换为空,所以你只留下不好的字符。

尝试这一点,没有否定(帽子移动到其他地方):

[|^<>:\?'\*\[\]\=%\$\+,;~&\{\}]*