1

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

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
  • “这也不行!” -错误的
  • “这也不行” - 错误
4

4 回答 4

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;
}

更新:看起来杰克的编辑也捕捉到了这些观点。(总是迟到一分钟,缺一分钱……)

于 2013-02-19T13:37:11.767 回答
1

一些东西:

  1. /something/new RegExp('something')是;的简写 你不应该把它们混在一起。

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

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

    1. /m仅当您的表达式中有锚点时才有用,
    2. /i如果您从角色类中移除A-Z或移除,则可以使用,a-z
    3. /g仅当您需要匹配多次时才有用,但在您的情况下,第一次匹配就足够了。

      var rexp = /[^a-zA-Z0-9\s]/;
      

整个函数可以这样写:

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]+$/.

于 2013-02-19T13:03:27.327 回答
1
[^a-zA-Z0-9]\s

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

要修复它,请移动\s括号内的内容。

不过,您仍然需要再做一件事。正则表达式将仅匹配这些字符之一。添加一个+以匹配一个或多个。

因此,固定正则表达式:

[^a-zA-Z0-9\s]+
于 2013-02-19T13:04:01.163 回答
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)
}
于 2013-02-19T13:08:05.590 回答