正则表达式否定

时间:2011-01-13 12:38:46

标签: javascript regex

我想在JavaScript中使用正则表达式来进行表单输入验证。 这些字符串不应该具有< ,>或者我提到的任何特定的字符集。如果字符串没有那些字符,测试应该通过。

那么如何在正则表达式中指定不要有char。

示例:

stringX = "vijay<>@$%_"

我的目标是

  1. 字符串不应该包含'&lt;','&gt;'字符。
  2. 如果stringX没有那些字符,则
  3. test应该返回true。
  4. 注意:

    我能做到:

    stringX = "vijay<>@$%_"
    regExp=/[<>`]/; 
    if(!rexExp.test(stringX)) {
      doSomthing()
    } 
    

    但我不想要这个。

    因为我最终会遇到一个小麻烦。

    我有一个名为validate()的通用函数

    function validate(stringX, regExp)
    {
       if(rexExp.test(stringX)) {  // see there is no "!" in the condition.
          return true;
        }
    }
    

    假设我要验证2个字符串。

    1. 案例1:只有数字。我会使用regExp:/ ^ [\ d] * $ /
    2. 案例2:没有&lt;,&gt; 。我会使用regExp:/ ^ [&lt;&gt;`] * $ 因为我不想指定所有允许的字符。我想指定字符 这是不允许的。
    3. 但我的验证功能仅适用于案例1。 与案例2一样,我不会得到预期的结果。只有当string只有&lt;,&gt;,`chars时,Validate()才会给我真实。

3 个答案:

答案 0 :(得分:6)

如果你对字符串中的任何其他字符都没问题,这将匹配所有没有字符&lt;,&gt;和`:

的字符串
regexp=/[^<>`]*/;

修改:使用行开头/结尾锚点修正表达式(感谢MizardX):

regexp=/^[^<>`]*$/;

答案 1 :(得分:4)

您正在寻找的正则表达式是:

/^[^<>`]*$/

如果您这样做是为了确保人们不会在输入中注入html标签,请忘记使用javascript作为验证器。

它只会给你一种虚假的安全感,不会阻止任何人滥用你的系统。

更好的方法是以下几点:

  • 剥离charachters serverside
  • html在存储之前编码输入服务器端
  • 按原样存储输入,并在输出时对其进行html编码

最后一个解决方案是我通常喜欢的解决方案,因为它是最灵活的,例如,如果用户以后能够编辑原始输入。

最后,在输出之前总是htmlencode usergenerated内容,否则你将遇到麻烦:)

答案 2 :(得分:0)

stringX = "vijay<>@$%_"
regEx=/[<>`]/g; 
stringX.replace(regEx, '');