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