javascript正则表达式验证带有空格的字母数字文本并拒绝特殊字符

javascript正则表达式验证带有空格的字母数字文本并拒绝特殊字符,javascript,regex,validation,Javascript,Regex,Validation,我不是正则表达式专家,但我尝试验证了一个字段,该字段允许字母数字数据带有空格,但不允许任何其他特殊字符。其中linkTitle是我在条件语句中使用以下正则表达式尝试测试的变量的名称 /[^A-Za-z\d\s]/.test(linkTitle) /[^A-Za-z0-9\s]/.test(linkTitle) /[^A-Za-z\d ]/.test(linkTitle) 这些都不起作用。。。我很想知道使用似乎引用了空格的\s的正则表达式出了什么问题,以及什么才是合适的正则表达式 提前谢谢 我认

我不是正则表达式专家,但我尝试验证了一个字段,该字段允许字母数字数据带有空格,但不允许任何其他特殊字符。其中linkTitle是我在条件语句中使用以下正则表达式尝试测试的变量的名称

/[^A-Za-z\d\s]/.test(linkTitle)
/[^A-Za-z0-9\s]/.test(linkTitle)
/[^A-Za-z\d ]/.test(linkTitle)
这些都不起作用。。。我很想知道使用似乎引用了空格的\s的正则表达式出了什么问题,以及什么才是合适的正则表达式


提前谢谢

我认为您希望匹配字符串的开头一次,然后使用正闭包,一个或多个字母、空格或数字,然后匹配字符串的结尾

/^[A-Za-z\d\s]+$/.test(linkTitle)
通过以下方式进行测试:

var reg = /^[A-Za-z\d\s]+$/;
["Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) {
    console.log(reg.test(str + "\n"));
});
显示
true
true
true
false
false


或者,如果您想允许空字符串,您可以使用相同的正则表达式,但Kleene闭包可以包含零个或多个字母、数字或空格

var regAllowEmpty = /^[A-Za-z\d\s]*$/;
["", "Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) {
    console.log(regAllowEmpty.test(str + "\n"));
}); 

请注意,
forEach
在较旧的浏览器上不起作用-这只是为了测试这里的三个正则表达式中的任何一个都将匹配不是
[
]
之间的任何单个字符,当然不包括
^

问题可能来自您解释
test()
提供的结果的方式。这里,如果正则表达式匹配字符串
linkTitle
,并且
test
返回true;这意味着您在输入中输入了错误的字符(既不是大写字母,也不是小写字母,既不是数字也不是空格)

已测试您的正则表达式:

/[^A-Za-z\d\s]/.test('0 '); // no match, false, input is ok
/[^A-Za-z\d\s]/.test('0 $'); // match, true, input is wrong

当您说
空格
时,您是指
'
字符,还是指包含所有其他空格字符,如
'\f'、'\t'
等?您的通过-失败条件是什么?编写一个简单的单元测试。假设目前任何像\t\v\f这样的空白都可以用于输入。所有三个正则表达式都非常好,如果
linkTitle
包含一个无效字符,则返回TRUE(如果只有有效字符,则返回FALSE)。当您说:“……这些都不起作用”时,您需要详细说明。请提供失败的代码。对于任何输入,这将返回true。尝试一个或多个instead@missingno-我在用头撞墙测试,试图找出问题所在-谢谢@AdamRackis我尝试了以下字符串,当它不应该有var linkTitle='sdasd 213123&*&*&'时,它通过了验证/^[A-Za-z\d\s]+$/.test(linkTitle);事实证明,这是对耐心的一次考验(@optimusprime619-你确定吗?我刚刚测试了同一个字符串,但它失败了。@optimusprime619-顺便说一句-你的问题让我对JavaScript标记投了第400票赞成票-所以谢谢:)感谢你的回答,但我理解NOT运算符,并且清楚基于它的条件操作。好的,但是你的示例有什么问题吗。您不想在输入中检测任何错误的字符吗?这三个正则表达式的行为方式都是一样的,它们都能工作。