就在你认为你已经掌握了正则表达式的时候;这一切都被撤消了。如果找到字母数字和空格字符以外的任何内容,希望返回错误检查。
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]+
几件事:
-
/something/
是new RegExp('something')
的简称符号;你不应该把它们混为一谈。 -
您需要在字符类内移动
s
;否则,匹配的字符不是字母数字后跟空格。 -
我认为您不需要所有这些修饰符:
-
/m
仅在表达式中有锚点时才有用, - 如果从字符类中删除
A-Z
或a-z
,则可以使用/i
, -
/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)
}