带有空格正则表达式的字母数字



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

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

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

  • "这没关系" - 真的
  • "这,不行"-假
  • "这也不行!">
  • "这也不是可以的" - 假的

尽管大部分讨论都是正确的,但似乎一切都忽略了一点,即您正在反转字符类,然后在函数中反转结果。 这在逻辑上很难阅读。 您还无缘无故地对正则表达式进行了两次测试。 更干净的东西是这样的:

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

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

[^a-zA-Z0-9]s

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

要修复它,请将s移到括号内。

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

因此,固定正则表达式:

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

几件事:

  1. /something/new RegExp('something')的简称符号;你不应该把它们混为一谈。

  2. 您需要在字符类内移动s;否则,匹配的字符不是字母数字后跟空格。

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

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

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

整个函数可以这样写:

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

与其使用双重否定,不如说"只允许这些字符":

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

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

尝试:

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

相关内容

  • 没有找到相关文章

最新更新