具有空白正则表达式的字母数字

时间:2013-02-19 13:01:55

标签: javascript regex

就在你认为你已经掌握正则表达式的时候;这一切都没有了。如果找到除字母数字和空白字符以外的任何内容,则希望返回错误检查。

function checkName(fname)
{ 
  var rexp = new RegExp(/[^a-zA-Z0-9]\s/gim)
  if (!rexp.test(fname))
    {
      alert ("'" + fname + "'\nis okay")
    }
    else
    {
       alert ("'" + fname + "'\nis NOT okay")
    }
  return !rexp.test(fname)
}

我希望上面的代码会返回以下

  • “这没关系” - 真的
  • “这个,不行”-false
  • “这也不行!” -false
  • “也不是”这个确定“ - 假”

4 个答案:

答案 0 :(得分:2)

虽然大部分讨论都是正确的,但似乎所有内容都忽略了你要反转字符类然后在函数中反转结果。这在逻辑上很难阅读。你也没有充分理由对正则表达式进行两次测试。更清洁的东西会是这样的:

function checkName(fname) { 
    var result = /^[a-z0-9\s]+$/i.test(fname)

    if (result) {
        alert ("'" + fname + "'\nis okay")
    } else {
        alert ("'" + fname + "'\nis NOT okay")
    }
    return result;
}

更新:杰克的编辑看起来也抓住了这些点。 (总是迟到一分钟,镍短......)

答案 1 :(得分:1)

一些事情:

  1. /something/new RegExp('something')的简短符号;你不应该混淆它们。

  2. 您需要在角色类中移动\s;否则你匹配一个不是字母数字后面跟一个空格的字符。

  3. 我认为你不需要所有这些修饰符:

    1. /m仅在您的表达式中有锚点时才有用
    2. 如果您从字符类中删除/iA-Z,则可以使用
    3. a-z
    4. /g仅适用于需要多次匹配的情况,但在您的情况下,第一次匹配就足够了。

      var rexp = /[^a-zA-Z0-9\s]/;
      
  4. 整个功能可以这样写:

    function checkName(fname)
    {
        return !/[^a-zA-Z0-9\s]/.test(fname);
    }
    

    不要使用双重否定,最好说“只允许这些字符”:

    function checkName(fname)
    {
        return /^[a-zA-Z0-9\s]*$/.test(fname);
    }
    

    如果您还需要测试非空名称,则应使用/^[a-zA-Z0-9\s]+$/

答案 2 :(得分:1)

[^a-zA-Z0-9]\s

你的正则表达式要求空格位于字母/数字之后。

要解决此问题,请移动括号内的\s

你仍然需要做一件事。正则表达式只匹配这些字符的一个。添加+以匹配一个或多个。

因此,修正了正则表达式:

[^a-zA-Z0-9\s]+

答案 3 :(得分:0)

尝试:

function checkName(fname)
{ 
  var rexp = new RegExp(/^[a-z0-9\s]+$/i)
  if (!rexp.test(fname))
    {
      alert ("'" + fname + "'\nis okay")
    }
    else
    {
       alert ("'" + fname + "'\nis NOT okay")
    }
  return !rexp.test(fname)
}