2011-01-13 98 views
4

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

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

例子:

stringX = "vijay<>@$%_" 

我的目标是

  1. 字符串不应该有 '<', '>' 字符。
  2. 如果stringX没有那些字符,测试应该返回true。

注:

我可以这样做:

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:没有 <,>。我会使用regExp:/^[<>`] * $ 因为我不想指定所有允许的字符。我想指定不允许的字符 。

但我的验证功能只适用于案例1. 正如情况2,我不会得到预期的结果。只有在字符串只有<,>,chars时,Validate()才会使我真正。

+0

你做了什么似乎很简单。你不喜欢它什么? – 2011-01-13 13:18:32

+0

我更新了我上面的问题。因为我有一个通用的validate()函数,当时我正处于一种情况,我必须说否定。 – 2011-01-17 05:10:29

回答

5

如果你是好与几乎任何其他字符字符串是,这将匹配不具有字符<所有字符串,>和`:

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

编辑:纠正表达与线开始/结束锚(感谢MizardX):

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

将锚点`^`和`$`添加到它,它应该工作。没有它们,它将始终与开始处的空子串匹配。 – 2011-01-13 14:20:33

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

你正在寻找的正则表达式是这样的:

/^[^<>`]*$/ 

如果你这样做是为了确保人们不注入HTML标记的投入,忘记使用JavaScript作为验证。

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

更好的方法是一个FO以下:

  • 条的charachters服务器端
  • HTML存储它
  • 存储输入原样之前编码输入服务器端,和HTML编码它时,你输出它

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

最后,在输出它之前,总是使用htmlencode使用原始内容,否则你将会陷入困境:)