【问题标题】:negation in regular expression正则表达式中的否定
【发布时间】:2011-01-13 12:38:45
【问题描述】:

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

那么如何在正则表达式中指定不包含字符。

示例:

stringX = "vijay<>@$%_"

我的目标是

  1. 字符串不应包含 '' 字符。
  2. 如果 stringX 没有这些字符,测试应该通过 return 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:只有位数字。我会使用正则表达式:/^[\d]*$/
  2. 案例 2:没有 .我会使用正则表达式:/^[`]*$ 因为我不想指定所有字符都被允许。我想指定字符 这是不允许的。

但我的验证功能仅适用于案例 1。 与案例 2 一样,我不会得到预期的结果。只有当字符串只有 ,` 字符时,Validate() 才会给我 true。

【问题讨论】:

  • 你所做的看起来很简单。你不喜欢它的什么?
  • 我在上面更新了我的问题。因为我有一个通用的 validate() 函数,所以我不得不说否定。

标签: javascript regex


【解决方案1】:

如果您对字符串中的任何其他字符表示满意,这将匹配所有不包含字符 和 `:

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

编辑:用行开始/结束锚点更正了表达式(感谢 MizardX):

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

【讨论】:

  • 添加锚点 ^$ ,它应该可以工作。没有它们,它将始终匹配开头的空子字符串。
【解决方案2】:

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

/^[^<>`]*$/

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

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

更好的方法是以下之一:

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

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

最后,在输出之前总是对用户生成的内容进行htmlencode,否则你会遇到麻烦:)

【讨论】:

  • 我已经在服务器端小心地验证和剥离字符。但是当我已经知道客户端不允许 时,我不想进行服务器调用。所以我想通知用户他是否在没有等待服务器端验证的情况下输入了这些字符。
【解决方案3】:
stringX = "vijay<>@$%_"
regEx=/[<>`]/g; 
stringX.replace(regEx, '');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多